Est-il possible de programmer l'iPhone en C ++

124

Je suis tout à fait pour la diversité linguistique, mais l'objectif C est insensé. Je suis donc curieux: est-il possible de coder des applications iPhone avec C ++ tout en utilisant l'API Cocoa, etc.?

Dmitri Nesteruk
la source

Réponses:

57

Réponse courte, oui, en quelque sorte. Vous pouvez utiliser Objective-C ++, que vous pouvez consulter sur Apple Developer Connection.

Si vous connaissez déjà C ++, apprendre Objective-C serait assez simple, si vous décidiez de l'essayer. Plus d'informations sur ce sujet sont également disponibles à l'ADC.

Robert S.
la source
1
pouvez-vous recommander un site Web ou un livre destiné aux programmeurs C ++ expérimentés pour apprendre l'Objective-C? J'ai réussi à écraser quelques applications de test ensemble, mais je trouve la syntaxe un peu en arrière et je suis sûr que je fais des choses qui conduisent à des fuites de mémoire, etc. juste par manque de connaissance d'Objective-C
Lea Hayes
3
@LeaHayes Un livre gratuit intitulé "From C ++ to Objective-C". Suppose que vous connaissez C ++ et vous indique ensuite comment les choses sont faites différemment en Objective-C. pierre.chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf (il s'agit d'une traduction anglaise de l'original français)
olafure
61

Bien qu'Objective-C semble effectivement être «insensé» au départ, je vous encourage à vous y tenir. Une fois que vous avez un moment "a-ha", tout commence soudainement à prendre un sens. Pour moi, il a fallu environ 2 semaines de concentration en Objective-C pour vraiment comprendre les frameworks Cocoa, le langage et comment tout cela s'intègre. Mais une fois que je l'ai vraiment "compris", c'était très très excitant.

Cela semble cliché, mais c'est vrai. Tenir le coup.

Bien sûr, si vous apportez des bibliothèques C ++ ou du code C ++ existant, vous pouvez utiliser ces modules avec Objective-C / Objective-C ++.

Mitch Haile
la source
42

J'utilise Objective-C pour gifler l'interface utilisateur ensemble.
Mais les tripes du code sont toujours écrites en C ++.

C'est l'objectif principal d'Objective-C, l'interface de l'interface utilisateur et la gestion des événements.
Et cela fonctionne très bien dans ce but.

J'aime toujours C ++ en tant que backend du code (mais c'est principalement parce que j'aime C ++), vous pouvez également utiliser Objective-C pour le backend de l'application.

Martin York
la source
9
@Spanky: Comment je fais quoi exactement. Vous pouvez écrire du C normal dans un fichier * .m. Vous pouvez écrire du C ++ normal dans des fichiers * .mm (Objective-C ++). À l'intérieur des fichiers Objective-C (++), vous pouvez utiliser normalement #include <XXX>comme les fichiers C / C ++.
Martin York
28

Tout d'abord, dire que Objective-C est "insensé" est humoristique - j'ai le livre Bjarne Stroustrup C ++ assis à mes côtés et qui affiche 1020 pages. Le PDF d'Apple sur Objective-C est 141.

Si vous voulez utiliser UIKit, il vous sera très, très difficile de faire quoi que ce soit en C ++. Toute application iPhone sérieuse conforme à l'interface utilisateur d'Apple aura besoin que ses parties de l'interface utilisateur soient écrites en Objective-C. Ce n'est que si vous écrivez un jeu OpenGL que vous pouvez vous en tenir presque entièrement à C / C ++.

dnolen
la source
30
Depuis quand moins de documentation était-elle une bonne chose? "Le langage de programmation C ++" est très complet et documente également la STL.
Timmmm
2
@Timmmm: Depuis que K&R a fait valoir ce point dans les premières questions de son livre. Objective-C est un langage beaucoup plus petit que le C ++, avec plusieurs des mêmes avantages (et certains autres). Tout est des compromis, bien sûr. Mais une documentation minimale rend Obj-C assez facile pour les personnes expérimentées en C (ou C ++) de se familiariser avec.
Ben Zotto
62
Désolé mais ObjC est fou. L'insistance sur une manière complètement différente de déclarer les fonctions, l'utilisation de crochets. C'est différent sans aucun avantage. Ils auraient pu rédiger le même langage efficace sans la syntaxe ridicule. Ils ont choisi de ne pas le faire. C'est donc insensé.
Rhubarb
13
@Rhubarb - Bien que j'aime Objective-C, je dois admettre que sa syntaxe étrange ne sert à rien.
Raphael
@Rhubarb, Yup, rappelez-vous qu'Apple est la société qui a inventé cette folie, et Apple est différent dans le seul but d'être différent.
SeanRamey
14

Ayant une certaine expérience de cela, vous pouvez en effet utiliser du code C ++ pour votre code "core", mais vous devez utiliser objective-C pour tout ce qui est spécifique à l'iPhone.

N'essayez pas de forcer Objective-C à agir comme C ++. Au début, cela vous semblera possible, mais le code qui en résulte ne fonctionnera vraiment pas bien avec Cocoa, et vous serez très confus quant à ce qui se passe. Prenez le temps d'apprendre correctement, sans aucun C ++, comment créer des interfaces graphiques et des applications iPhone, puis connectez-vous à votre base C ++.

Chris Jefferson
la source
3

Vous devez utiliser Objective C pour s'interfacer avec l'API Cocoa, vous n'avez donc pas le choix. Bien sûr, vous pouvez utiliser autant de C ++ que vous le souhaitez dans les coulisses (Objective C ++ rend cela facile).

C'est un langage insensé en effet, mais c'est aussi ... assez amusant à utiliser une fois que vous y êtes un peu habitué. :-)

Frederik Slijkerman
la source
2

Je suis en train de porter une application Android gourmande en calcul écrite en Java vers iOS6. Je fais cela en portant les parties non-UI de Java vers C ++, en écrivant les parties (minimales) de l'interface utilisateur dans Obj-C et en enveloppant les premières dans une (petite) interface C en utilisant la technique standard C / C ++, de sorte que il est accessible depuis Obj-C, qui est après tout un sur-ensemble de C.

Cela a été efficace jusqu'à présent et je n'ai rencontré aucun piège. Cela semble être une approche légitime, car Xcode vous permet de créer des classes C ++ ainsi que des classes Obj-C, et certains des exemples de code officiels font les choses de cette façon. Je n'ai pas eu à sortir des interfaces officiellement prises en charge pour ce faire.

Il ne semble pas y avoir grand-chose à gagner à écrire mon code d'interface utilisateur restant en C ++ même si cela était possible, compte tenu de l'aide que vous a fournie le constructeur d'interface dans Xcode, donc ma réponse serait que vous pouvez utiliser C ++ pour presque toute votre application, ou autant que vous le jugez appropriée / pratique.

JulianSymes
la source
2

Oui mais Penser que vous pouvez programmer tout type de programme dans une seule langue est une idée erronée à moins que vous n'écriviez des programmes très simples. Objective C est pour Cocoa comme C # est pour .NET, Utilisez le bon outil pour le bon travail, Essayer de faire interagir C ++ avec Cocoa via l'écriture de code de pontage et essayer de faire en sorte que le code C ++ se comporte selon les exigences de Cocoa n'est pas une bonne idée ni attendre C ++ la performance de l'Objectif C est. Vous devez essayer de mettre en page la conception et l'architecture de l'application en tenant compte des compétences existantes et de déterminer quelle partie doit être écrite dans quelle langue, puis construire en conséquence.

Bilal Ahsan
la source
0

J'écris actuellement un framework Objective-C ++ appelé Objective-X, qui rend PURE C ++ iPHONE PROGRAMMING possible. Vous pouvez faire comme ceci:

#import "ObjectiveX.h"

void GUIApplicationMain() {    
    GUIAlert Alert;
    GUILabel Label;
    GUIScreen MainScreen;

    Alert.set_text(@"Just a lovely alert box!");
    Alert.set_title(@"Hello!");
    Alert.set_button(@"Okay");
    Alert.show();

    Label.set_text(@"Ciao!");
    Label.set_position(100, 200, 120, 40);

    MainScreen.init();
    MainScreen.addGUIControl(Label.init());    
}

et compilez-le en utilisant les options de ligne de commande appropriées de GCC. J'ai déjà compilé cette application helloworld et elle w0rkX0rz comme un charme. ;-) Il sera bientôt disponible sur GoogleCode. Recherchez Objective-X ou visitez http://infotronix.orgfree.com/objectivex env. une semaine plus tard!

URL mise à jour (mais apparemment inactive): http://code.google.com/p/objectivex/

Arpad Goretity
la source
4
Pourquoi ne pas attendre que cela soit réellement disponible?
Georg Fritzsche
8
Les deux liens sont 404 maintenant
Zhao Xiang
1
Selon SourceForge: "Depuis le 2014-01-24, ce projet n'est plus en développement actif." sourceforge.net/projects/objectivex
JAL
0

C'est peut-être un peu hors-sujet, mais de toute façon. Vous pouvez programmer C ++ directement sur les appareils iOS. Découvrez l'application CppCode ios - http://cppcode.info . Je crois que cela aide à apprendre c et c ++ et objective-c plus tard.

4ntoine
la source