2010-06-14 5 views
2

Les questions ont peut-être déjà été posées, mais je veux comprendre si les frameworks de l'iPhone se limitaient uniquement à l'utilisation d'Objective-C ou si on pouvait aussi y accéder à partir du code C/C++?Utiliser UIKit à partir de C/C++

Par exemple, est-il possible d'utiliser des commandes iPhone standard à partir du code C/C++? Des classes standard comme NSArray, NSSet sont-elles accessibles à partir du code C/C++?

Si tel est le cas, quelqu'un pourrait-il donner un lien vers des exemples pour le faire?

+0

duplication possible de [Utiliser C++ avec Cocoa au lieu d'Objective-C?] (Http://stackoverflow.com/questions/525609/use-c-with-cocoa-instead-of-objective-c) –

Répondre

4

Vous pouvez mélanger Objective C avec C++. Renommez simplement votre fichier source en .mm.

Certaines classes Foundation telles que NSArray et NSSet sont des ponts sans frais vers des objets CoreFoundation tels que CFArray et CFSet. Ce dernier est une bibliothèque C pure que vous pouvez utiliser sans ObjC.


UIKit est un framework Objective-C pur. Vous pouvez utiliser UIKit avec C et C++ que l'exécution Objective-C est accessible à partir de fonctions C pur telles que objc_msgSend, par exemple.

id UIView = objc_getClass("UIView"); 
SEL alloc = sel_registerName("alloc"); 
id view = objc_msgSend(UIView, alloc); 
// ... 

mais ce n'est pas fiable, par ex.

objc_msgSend(view, sel_registerName("setAlpha:"), 0.4); 

se pas faire ce que vous voulez.

Vous pouvez isoler la partie de l'interface utilisateur et écrire ObjC uniquement pour cette partie. Créer une interface C entre l'interface utilisateur et le backend, que vous pouvez utiliser C++ ou toute langue (autorisée).

+0

Il peut écrire des classes C++ de manière à ce qu'elles soient compatibles avec les classes Objective-C, mais les messages de mots clés posent toujours problème. – jer

+1

Pourquoi pas 'objc_msgSend (voir, sel_registerName (" setAlpha: "), 0.4),' faire ce qu'il veut? – jcanizales