2009-11-19 5 views
3

J'aime beaucoup le C++ et pour être honnête, le «super ensemble» Objective-C de C est plus un «super échec». Une application iPhone peut-elle être écrite en C++ pur? Y a-t-il des parties de l'API qui ne sont pas disponibles en C++?Quelles sont les limitations de C++ fonctionnant sur l'iPhone?

+0

Apple VRAIMENT n'est pas amical envers les applications écrites d'une manière qu'ils n'approuvent pas. Ma conjecture est que vous auriez encore plus que les problèmes d'approbation habituels si vous faites cela et essayez d'entrer dans l'App Store. –

+6

C'est idiot, une grande partie des jeux écrits pour iPhone sont déjà principalement en C++, XCode supporte le C++ dès la sortie de la boîte. – jessecurry

+6

@Michael Kohne: Si je pouvais voter contre votre commentaire, je le ferais. Complètement faux. –

Répondre

5

Vous ne pouvez pas coder purement en C++. Pour un, la classe UIApplicationDelegate que chaque application doit hériter est Objective-C. Cependant, rien ne vous empêche de coder tout ce qui n'est pas lié au framework dans Objective-C++. Vous aurez toujours besoin d'utiliser les appels Objective-C pour UIKit et d'autres frameworks, mais toute la logique de votre application peut être en C++.

De l'Objective-C++ section du guide de programmation Objective-C, ce sont les principales limites:

Objective-C++ n'ajoute pas C++ fonctionnalités aux classes Objective-C, ni -t-il ajouter Objective-C caractéristiques à classes C++. Par exemple, vous ne pouvez pas utiliser la syntaxe Objective-C pour appeler un objet C++ , vous ne pouvez pas ajouter de constructeurs ou de destructeurs à un objet Objective-C, et vous ne pouvez pas utiliser les mots-clés et de manière interchangeable. Les hiérarchies de classe sont séparées; une classe C++ ne peut pas hériter d'une classe Objective-C et une classe Objective-C ne peut pas hériter d'une classe C++ d'une classe . En outre, gestion des exceptions multi-langue est non pris en charge. Autrement dit, une exception levée en code Objective-C ne peut pas être interceptée en code C++ et, inversement, une exception levée en code C++ ne peut pas être interceptée en code Objective-C. Pour plus d'informations sur les exceptions dans Objective-C, voir « Gestion des exceptions. »

+0

La partie concernant les exceptions s'applique uniquement au code Mac 32 bits. Dans l'iPhone et le code Mac 64 bits, les deux langues utilisent le même mécanisme pour les exceptions. –

2

Certaines API Carbon existent dans l'iPhone, vous pourrez donc y accéder depuis une application purement C++. Cela étant dit, cependant, il y a beaucoup d'API très importantes qui sont seulement Objective-C (par exemple, UIKit). Avec quelques bonnes décisions de conception, un shim raisonnable en C/C++ pourrait être écrit pour encapsuler l'Objective-C nécessaire pour faire fonctionner une application iPhone. Une fois cela fait, vous serez en mesure d'écrire votre application avec C++ traditionnel sans problème.

La manière dont Objective-C++ est configuré vous permet d'écrire des appels Objective-C de bonne foi en C++ et mix-in si nécessaire. C'est la voie que j'ai suivie dans les applications iPhone que j'ai développées.

+0

On dirait un très bon moyen de le faire! – mmmmmmmm

1

Je ne pense pas que vous parvenez à échapper complètement objective-c pour toute application significative, mais vous êtes libre de code principalement en C++. En fait, sio2 (un des moteurs de jeu iphone) est principalement en C++ si vous deviez l'utiliser comme base pour votre application, vous pourriez probablement éviter d'écrire vous même l'objectif-c.

Je voudrais savoir ce que vous n'aimez pas à propos de l'objectif-c? Je viens d'un arrière-plan C++ et trouve Obj-C rafraîchissant et plus OO que C++.

+0

J'aime certaines des idées (comme la dactylographie d'exécution) bien que je l'aime plus comme une extension à une langue statiquement typée. Mais ce qui me semble tout à fait grossier, c'est la langue itswlf. Très moche et les noms de message/méthode pour les méthodes avec des paramètres est une vraie douleur. – mmmmmmmm

+0

C est un langage typé statiquement. Je suggère de jouer avec Objective-C pendant un moment, venant de C++, les parenthèses étaient un peu difficiles à s'habituer, mais maintenant j'adore la syntaxe. Je pense que mon code est beaucoup plus expressif que dans les autres langues que j'ai utilisées. – jessecurry

+0

@jessecurry: Vous avez raison: C est un langage typé statiquement. Ce que je voulais vraiment dire était: je voudrais que ce soit une extension d'un langage statique, orienté objet :-) – mmmmmmmm

1

Vous avez seulement besoin de faire l'interface graphique dans Obj-C (Obj-C++).

L'intégration de tout autre code C++ avec l'interface ne pose aucun problème.Faites juste attention à supprimer manuellement les pointeurs qui se trouvent à l'intérieur des objets Obj-C

Questions connexes