2010-11-29 3 views

Répondre

2

Vous pouvez utiliser une fonctionnalité appelée « catégories », qui permet Vous pouvez étendre une classe existante en y ajoutant des propriétés et des méthodes.

Généralement, vous utilisez une catégorie vide dans le fichier .m de votre classe pour les méthodes et propriétés privées et définissez une catégorie nommée distincte dans un fichier .h externe pour les membres protégés. Les catégories sont en fait assez intéressantes en ce qu'elles vous permettent de outrepasser propriétés existantes. Ainsi, par exemple, vous pouvez définir une propriété en lecture seule dans votre fichier .h:

@interface Whatever { 
    NSObject *aValue; 
} 

@property (nonatomic,retain,readonly) NSObject *aValue; 

@end 

Et vous pouvez le faire en lecture/écriture pour votre propre usage privé dans une catégorie vide dans votre fichier .m :

@interface Whatever() 
    @property (nonatomic,retain) NSObject *aValue; 
@end 

Vous pouvez en savoir plus sur les catégories here.

+3

Ce n'est pas une catégorie; c'est une extension de classe. Les extensions de classe et les catégories sont similaires, mais les extensions ont des différences d'utilisation subtiles, mais significatives (et par conception), par rapport aux catégories en ce qui concerne @property. – bbum

6

Si vous voulez cacher d'être visible dans le fichier .h, envisagez d'utiliser une extension de classe privée dans le fichier .m:

@interface YourClass() 

@property(retain, nonatomic)NSString*str; 

@end