2010-08-01 4 views
2

Я складываю категорию NSMutableArray, которые я использую в классе АКак использовать ту же категорию в нескольких классах?

@implementation NSMutableArray (StackUtil) 

- (void)push:(id)stackObject { 

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

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

@end 

Как правильно включить эту категорию для класса B, который не связан с классом А? Также я заметил, что когда я #import Class A в заголовок для класса C работают методы категории, но я получаю предупреждение «объект может не отвечать на push-сообщение». Может кто-то прояснить, как категории «повторно используются» и почему у них есть имена (StackUtil в этом случае) и как они используются.

ответ

6

Вы должны иметь соответствующий @interface NSMutableArray (StackUtil) в файле заголовка, который объявляет категорию. Импорт этого заголовка должен быть достаточным для того, чтобы использовать ваши новые методы на любом NSMutableArray в объеме импорта.

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

Конечно @interface, и, как правило @implementation, должны быть в файлах самостоятельно, независимо от ваших классов А, В и С, так как они являются дополнениями общего назначения, а не что-то принадлежащие к одному из тех, клиентских классов.

+1

Да! Определение категории в интерфейсе - это то, что я пропустил. Сейчас мне кажется, что я думаю об этом. Надеюсь, этот пост поможет другим стать новым категориям. – ghostsource

Смежные вопросы