2010-08-01 4 views
2

je catégorie pile pour NSMutableArray que j'utilise en classe AComment utiliser la même catégorie dans plusieurs classes?

@implementation NSMutableArray (StackUtil) 

- (void)push:(id)stackObject { 

[self addObject:stackObject]; 
} 
- (id)pop { 

id retVal = [[self lastObject]retain]; 
[self removeLastObject]; 
return [retVal autorelease]; 
} 

@end 

Comment puis-je inclure correctement cette catégorie de classe B pour ce qui est sans rapport avec la classe A? De plus, j'ai remarqué que lorsque j'importais la classe A dans l'en-tête de la classe C, les méthodes de la catégorie fonctionnent, mais je reçois l'avertissement «l'objet peut ne pas répondre au message push». Est-ce que quelqu'un pourrait éclaircir comment les catégories sont "réutilisées" et pourquoi elles ont des noms (StackUtil dans ce cas), et comment elles sont utilisées.

Répondre

6

Vous devez avoir un @interface NSMutableArray (StackUtil) correspondant dans un fichier d'en-tête qui déclare la catégorie. L'importation de cet en-tête devrait suffire à conférer l'utilisation de vos nouvelles méthodes sur tout NSMutableArray dans le cadre de l'importation.

@interface NSMutableArray (StackUtil) 
- (void) push:(id)stackObject; 
- (id) pop; 
@end 

Certes, le @interface, et généralement le @implementation, devrait être dans les fichiers de leur propre, indépendamment de vos classes A, B et C, car ils sont des ajouts à usage général, et non pas quelque chose appartenant à un de ces classes client.

+1

Oui! Définir la catégorie dans l'interface est ce que j'ai manqué. Cela semble vraiment basique maintenant que j'y pense. Espérons que ce message aidera les autres nouveaux aux catégories. – ghostsource

Questions connexes