2013-05-31 13 views
5

Nach Stochern einiger Header-Dateien im Foundation Rahmen (NSString.h zum Beispiel), um eine Kategorie in Same Header-Datei erklären, bemerkte ich, dass die Erklärung für NSString wie folgt aussieht:Warum als Klassendeklaration

@interface NSString : NSObject <NSCopying, NSMutableCopying, NSSecureCoding> 

/* NSString primitive (funnel) methods. A minimal subclass of NSString just needs to implement these, although we also recommend getCharacters:range:. See below for the other methods. */ 
- (NSUInteger)length;   
- (unichar)characterAtIndex:(NSUInteger)index; 

@end 

Der Rest Die Methoden sind in Kategorien deklariert, die wiederum in derselben Header-Datei deklariert sind.

Nach dem Lesen von this answer scheint die Implikation hauptsächlich für das Organisieren von Code zu sein.

Gibt es einen Vorteil (abgesehen von der logischen Gruppierung von Methoden), um Kategorien in derselben Kopfzeile wie die Klassendeklaration zu deklarieren, insbesondere in dem Fall, in dem die Implementierung ausgeblendet ist, wie im Fall NSString?

Antwort

8

Allgemein, ja, Kategorien werden für organisatorische Zwecke verwendet. Aber im Fall von NSString werden sie hauptsächlich verwendet, weil NSString ein Klassencluster ist. Daher werden die Kategorien dazu verwendet, die zusätzlichen Methoden (im Gegensatz zu den primitiven Methoden) der Klassen im Cluster zu definieren.

Es gibt eine nette schreiben über Klassencluster von Mike Ash here.

Verwandte Themen