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.