qual è la differenza tra una funzione C (statica o meno) dichiarata all'interno o all'esterno del blocco di implementazione (@implementation ... @end) di una classe Objective-C?Obj-C: funzioni C dichiarate all'interno o all'esterno del blocco @implementation, qual è la differenza?
è questo particolarmente vero ?:
Se avete bisogno di colpire all'interno dell'oggetto direttamente, è possibile inserire questa funzione all'interno del blocco @implementation della classe, e quindi è possibile accedere alle variabili di istanza con l'operatore freccia C. Ma è un po 'cattivo, quindi per preservare la tua Purezza di Essenza dovresti usare le chiamate di metodo sul tuo oggetto. Fine del sermone. Ecco il male:
@implementation OblateSphereoid
void drawEggThunk (DrawingContext *context, Rect areaToDraw, void *userData)
{
BWOblateSphereoid *dealie = (BWOblateSphereoid *)userData;
dealie->_frognatz = [NSColor plaidColor];
// and more stuff.
} // drawEggThunk
...
@end // OblateSphereoid
posso accedere alle variabili della mia classe delle istanze all'interno di funzioni (dichiarati nella stessa classe) in questo modo?
Inevitato per essere una domanda interessante (anche se forse pratica molto negativa) Solo per curiosità, puoi chiamare drawEggThunk solo dalla tua classe? –
non posso, la funzione è una funzione di callback chiamata da un sottosistema C, come potete vedere io uso * userData per passare un riferimento a self quando sono configurate le callback. – jlpiedrahita