2012-01-31 12 views
5

Quanta integrazione hanno C++ e Objective C in Objective C++? Mi rendo conto che Objective C++ compila sia il codice C++ che il codice Objective C, ma le lingue effettivamente interagiscono tra loro?Utilizzo di C++ in Objective C++?

Ad esempio, posso creare un modello di un oggetto Objective C? Che ne dici di ereditare una classe Objective C da una classe C++?

Quello che sto cercando di fare è mescolare le lingue o semplicemente si compilano insieme nello stesso file? Fino a che punto?

+0

Hai tipo di backwards. Per un file .mm un compilatore C++ compila il codice Objective-C. Per un file .m viene invece utilizzato un compilatore C. Mescolare le gerarchie di classi C++ e Objective-C non è "normalmente" possibile (anche se sono sicuro che ci sono trucchi), ma è possibile incorporare un'istanza di classe nell'altra. –

risposta

2

Bene, è abbastanza comune utilizzare Objective-C++ per creare applicazioni. Puoi avvolgere Objective-C attorno al codice C++ ma non puoi condividere oggetti. Ad esempio non è possibile creare un oggetto NSString in Objective-C e provare a richiamare il metodo hasSuffix: da C++ e viceversa. Quindi per condividere il contenuto tra questi due è necessario usare i tipi C come structs, char, ints ecc. È perché gli oggetti Objective-C sono utilizzabili solo nell'ambiente runtime Objective-C e gli oggetti C++ sono utilizzabili solo nell'ambiente di runtime C++ . Quindi l'unica cosa che condividono e possono comunicare è C.

Forse un piccolo esempio ti mostrerà come puoi interagire tra questi due.

NSString * objcStr = [[NSString alloc] initWithString:@"Hello World!"]; 
std::string cppStr ([objcStr UTF8String]); 
std::cout << cppStr; 
2

Dai un'occhiata alla sezione della guida del linguaggio Objective-C su Objective-C++ e/o Wikipedia article.

Per rispondere alle vostre domande specifiche, sì, le lingue possono "interagire". Sì, puoi creare un modello di un oggetto Objective-C (id è solo un puntatore) ma non aspettarti di utilizzare RAII con oggetti Objective-C. No, non puoi derivare una classe Objective-C da una classe C++ o una classe C++ da una classe Objective-C.