2011-10-12 11 views
5

Zauważyłem wiele deklaracji @interface dla klas Objective-c. Chciałbym zrozumieć, dlaczego deweloperzy deklarują @interface w jeden z następujących sposobów:Odmiany deklaracji @interface, niektóre z nawiasami

// 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

Na przykład: [szybkie wyszukiwanie] (http://stackoverflow.com/search?q=%5Bobjc%5D+%40interface+parentheses&submit=search) podkręca http : //stackoverflow.com/questions/7378479/what-does-the-text-inside-parentheses-in-interface-and-implementation-directive –

+1

Co powiesz na [specyfikację językową] (http://developer.apple) .com/biblioteka/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocDefiningClasses.html # // apple_ref/doc/uid/TP30001163-CH12-SW1)? –

Odpowiedz

5

To jest po prostu normalnym class interface, dziedziczy z NSObject, gdzie można zadeklarować Ivars, właściwości i metody

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

Poniżej dwa są categories, które pozwalają, aby dodać metody do klasy. Nie jest to jednak podklasa (nie deklaruj metody o tej samej nazwie, ponieważ nie będziesz mieć dostępu do oryginalnej). Jeśli masz nazwaną kategorię interfejsu (np. @interface MyClass (Private)), implementacja powinna być dostarczona w @implementation MyClass (Private), w przypadku kategorii bez nazw (zwanych również rozszerzeniami), implementacja może być dostarczona jak zwykle. Zauważ, że rozszerzenia również pozwalają dodawać ivars do klasy, podczas gdy (nazwane) kategorie tego nie robią.

// 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

Możliwe jest _currently_, aby dodać pamięć do klasy w rozszerzeniu. Jest mało prawdopodobne, aby kiedykolwiek można było to zrobić za pośrednictwem kategorii. –

-1

Co kiedykolwiek idzie w pliku .m jest prywatny. parens są dla kategorii, więc możesz podzielić swój kod na kategorie, aby był bardziej czytelny. ponieważ kod jest w .m i prywatny, nazwali kategorię prywatną.

Powiązane problemy