Sono nuovo di Objective-C, ma sono curioso di qualcosa che non ho mai visto indirizzato da nessun'altra parte.Variabile di classe definita in @implementation anziché in @interface?
qualcuno potrebbe dirmi qual è la differenza tra una variabile privata che è dichiarato al @interface
blocco rispetto a una variabile che viene dichiarata all'interno del blocco @implementation
al di fuori dei metodi di classe, vale a dire:
@interface Someclass : NSObject {
NSString *forExample;
}
@end
vs.
@implementation Someclass
NSString *anotherExample;
-(void)methodsAndSuch {}
@end
Sembra entrambe le variabili (forExample
, anotherExample
) sono ugualmente accessibili per tutta la classe e non riesco davvero a trovare una differenza nel loro comportamento. Il secondo modulo è anche chiamato una variabile di istanza?
Questo è quello che sospettavo e la tua risposta ha perfettamente senso, ma se Provo ad accedere a 'anotherExample' in qualsiasi altra classe (da includendo correttamente 'Someclass' in quelle classi) il compilatore mi dice che questa variabile non è dichiarata. Cosa dà? – bitcruncher
@bitcruncher perché 'anotherExample' è solo globale del file .m in cui è stato dichiarato. Se vuoi che sia disponibile per altri file, devi dichiarare 'extern NSString * anotherExample;' nel file .h, quindi '# import' il file .h ovunque ti serva il globale. Questo puzza di odore di codice, sebbene abbia casi di utilizzo validi. –
nessun codice attuale puzza :-) questa era solo una domanda esplorativa. – bitcruncher