2011-10-12 6 views
5

Ho notato una varietà di dichiarazioni @interface per classi Objective-c. Mi piacerebbe capire perché gli sviluppatori dichiarano @interface nei seguenti modi:Varietà di dichiarazioni @interface, alcune con parentesi

// in the .h file 
@interface MyClass : NSObject 
// ... 
@end 

// in the .m file (what's the purpose of the parens?) 
@interface MyClass() 
// more property declarations which seem like they can go in the .h file 
@end 

// again in the .m file (what's the purpose of private?) 
@interface MyClass (Private) 
// some method declarations 
@end 
+1

Per esempio: [una rapida ricerca] (http://stackoverflow.com/search?q=%5Bobjc%5D+%40interface+parentheses&submit=search) salta fuori http : //stackoverflow.com/questions/7378479/what-does-the-text-inside-parentheses-in-interface-and-implementation-directive –

+1

Che dire di guardare le [specifiche della lingua] (http://developer.apple .com/library/mac/documentazione/cacao/concettuale/ObjectiveC/capitoli/ocDefiningClasses.html # // apple_ref/doc/uid/TP30001163-CH12-SW1)? –

risposta

5

Questo è solo un normale class interface, ereditando dalla NSObject, in cui si dichiara ivars, le proprietà ei metodi

// in the .h file 
@interface MyClass : NSObject 
// ... 
@end 

i seguenti due sono categories, che permettono di aggiungere metodi a una classe. Non è tuttavia una sottoclasse (non dichiarare un metodo con lo stesso nome, in quanto non sarà possibile accedere a quello originale). Se si dispone di una categoria denominata dell'interfaccia (ad esempio @interface MyClass (Private)), l'implementazione dovrebbe essere fornita in @implementation MyClass (Private), nel caso di categorie senza nome (anche chiamate estensioni), l'implementazione può essere fornita come al solito. Nota che le estensioni ti permettono anche di aggiungere ivar alla classe mentre le categorie (nominate) no.

// in the .m file (what's the purpose of the parens?) 
@interface MyClass() 
// more property declarations which seem like they can go in the .h file 
@end 

// again in the .m file (what's the purpose of private?) 
@interface MyClass (Private) 
// some method declarations 
@end 
+1

È possibile _currently_ aggiungere storage a una classe in un'estensione. È improbabile che sia mai possibile farlo tramite una categoria. –

-1

Cosa va mai nel file .m è privato. le parentesi sono per categorie in modo da poter segmentare il codice in categorie per renderlo più leggibile. perché il codice è in .m e privato, hanno chiamato la categoria privata.