2013-05-31 17 views
5

Dopo aver frugato alcuni file di intestazione nel quadro Foundation (NSString.h per esempio), ho notato che la dichiarazione per NSString assomiglia:Perché Dichiarare una categoria nella stesso file di intestazione come dichiarazione Classe

@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 

Il resto del i metodi sono dichiarati in categorie, che a loro volta sono dichiarati nello stesso file di intestazione.

Dopo aver letto this answer, l'implicazione sembra essere principalmente per l'organizzazione del codice.

Esiste un vantaggio (diverso dal raggruppamento logico dei metodi) nella dichiarazione di categorie nella stessa intestazione della dichiarazione di classe, in particolare nel caso in cui l'implementazione sia nascosta, come nel caso di NSString?

risposta

8

In generale, sì, le categorie vengono utilizzate per scopi organizzativi. Ma nel caso di NSString vengono utilizzati principalmente perché NSString è un cluster di classe. In quanto tale, le categorie vengono utilizzate per definire i metodi aggiuntivi (al contrario dei metodi primitivi) delle classi nel cluster.

C'è una bella descrizione dei cluster di classe di Mike Ash here.

Problemi correlati