2009-04-03 11 views

risposta

14

avevo messo il contrario: si potrebbe rischiare overcomplicating qualcosa che è ridicolmente semplice :-)

Ok, devo essere un po 'loquace. Come altri stanno sottolineando, Objective-C è in realtà solo un set minimo di estensioni di linguaggio per C. Quando scrivi il codice Objective-C, stai effettivamente scrivendo C. Puoi persino accedere alle macchinazioni interne del supporto runtime Objective-C usando alcune pratiche funzioni C che fanno parte della lingua (no ... non ti consiglio di farlo in realtà a meno che tu non sappia davvero cosa stai facendo).

Circa l'unica volta in cui ho avuto momenti delicatamente delicati è quando volevo passare un metodo di istanza Objective-C come un callback a una funzione C. Supponiamo, ad esempio, che io stia usando una libreria cross-platform pure-C che ha funzioni che accettano una callback. Potrei chiamare la funzione all'interno di un'istanza di oggetto per elaborare alcuni dati, e poi voglio che quella funzione C richiami la mia istanza BACK quando viene eseguita, o come parte di ottenere input aggiuntivi ecc. Ecc (un paradigma comune in C). Questo può essere fatto con il funky function wrapping, e alcuni altri metodi creativi che ho visto, e se hai mai avuto bisogno di farlo su google "metodo-obiettivo-c per callback c" o qualcosa del genere ti darà la merce.

L'unico altro consiglio è di assicurarsi che gli oggetti gestiscano in modo appropriato qualsiasi memoria malloc manuale creata per essere utilizzata dalle funzioni C. Vorresti che le tue classi obiettivo-c mettessero in ordine quella memoria su dealloc se, in effetti, fosse finita.

Oltre a questo, spolvera qualsiasi riferimento su C e divertiti!

7

Non si puo 'mescolare' C e Objective-C: Objective-C è un superset di C.

Ora, C++ e Objective- C d'altra parte ...

+0

come dovrei riformulare la domanda? – gargantuan

+0

Non è questione di riformulazione. Objective-C contiene tutto il C, quindi non c'è alcun mixaggio. –

+1

Ti capisco, ma tieni a mente che sono nuovo di C in qualsiasi modo, e che apprendo il cacao si concentra su Objective-C. Tuttavia, Chipmunk è scritto in pura C. Quindi, ho già trovato un problema in cui le strutture non sono oggetti, anche se per un nuovo ragazzo, l'aspetto è lo stesso all'inizio. – gargantuan

1

L'obiettivo C è un superset di C, pertanto il conflitto non deve essere.

Tranne che, come indicato here pura C ha diverse convenzioni (ovviamente, poiché non esiste un meccanismo integrato) per gestire la programmazione OO. In C, un oggetto è semplicemente una (struct *) con i puntatori di funzione.

Problemi correlati