Il modo migliore per portare C ++ nel progetto Objective-C

7

Per un imminente progetto XCode iOS ho intenzione di scrivere le mie viste e visualizzare i controller in Objective-C. Il mio modello mi sarà fornito in C ++.

Sono a conoscenza di 2 modi di usare C ++ in un progetto obiettivo-c. Sono descritti di seguito. Quali sono i pro e i contro di ciascun metodo. C'è qualche altro modo consigliato e quali sono i suoi pro e contro?

-In file di intestazione C ++, utilizzare la dichiarazione "C" extern come descritto in Wikipedia .

- Avvolgimento di C ++ con Objective-C ++ come descritto da Rob Napier .

    
posta Ben Boral 23.08.2012 - 07:32
fonte

2 risposte

7

Le tue viste e i tuoi controller di visualizzazione dovranno essere Objective-C, a causa dei framework. Questo molto è dato. La domanda quindi è dove mettere il ponte tra il tuo codice C ++ e il tuo codice Objective-C.

In primo luogo, sconsigliamo di avvolgere il codice C ++ nelle funzioni C con una convenzione linker extern C {} . Vi siete quindi dati due problemi: come gestire le classi e i tipi C ++ da C, e come usare l'interfaccia C strutturata da oggetti Objective-C. Entrambi questi problemi sono superabili ma potresti anche non doverli presentare.

Sono possibili tre approcci:

  • scrivi la logica e il comportamento della tua applicazione in C ++, dove alcune delle classi hanno campi membro che sono tipi Objective-C in modo che tu possa interfacciarti con i framework. È probabile che questo approccio si imbatta in problemi di "mancata corrispondenza dell'impedenza" tra i framework - che hanno una politica "non chiamaci, ti chiameremo" - e il tuo codice che sta cercando di prendere il controllo del comportamento dell'applicazione dall'esterno l'ambito del framework.

  • nei controller della vista, mantieni i riferimenti ai tipi C ++ come variabili di istanza. Le tue classi di controller di visualizzazione saranno file Objective-C ++.

  • scrivere classi Adapter o Façade in Objective-C ++ che forniscono un'APO Objective-C e gestiscono internamente i tipi C ++. I tuoi controller di vista accedono al modello esclusivamente tramite questo livello.

Di questi approcci, preferirei il terzo. Si separano le responsabilità di "gestione del modello" (nel codice C ++), "visualizzazione del contenuto del modello" (nelle classi del controllore della vista ObjC) e "bridging C ++ to ObjC" (nel livello dell'adattatore). Incontrerai molti sviluppatori che conoscono ObjC ma non C ++ e viceversa, questo approccio rende più facile per quegli sviluppatori contribuire alla tua base di codice, se finiscono per lavorare con te o semplicemente cercano di aiutarti sul web.

    
risposta data 23.08.2012 - 09:38
fonte
1

Non so molto di Objective-C, ma l'approccio extern "C" funzionerà solo se i tuoi file di intestazione C ++ non contengono classi C ++, solo strutture e funzioni in stile C. Se il tuo modello è scritto in C ++, immagino che non sarà così, quindi penso che dovrai provare la seconda strada.

extern "C" è destinato a utilizzare il codice C in C ++, non viceversa.

    
risposta data 23.08.2012 - 08:03
fonte

Leggi altre domande sui tag