Objective-C categories: Можно ли добавить свойство для метода, не входящего в мою категорию?
Я хочу использовать категорию, чтобы сделать метод в исходном классе доступным как свойство.
Класс A:
@interface ClassA
- (NSString*)foo;
@end
Класс A категория
@interface ClassA (Properties)
- (void)someCategoryMethod;
@property (nonatomic, readonly) NSString *foo;
@end
Теперь, когда я это делаю, он работает ( EDIT: Возможно, он не работает, он не жалуется, но я вижу странность), но он дает мне предупреждения, потому что я не синтезируя свойство в моей реализации категории. Как сообщить компилятору, что все на самом деле просто отлично, поскольку исходный класс синтезирует для меня свойство?
Ответы
Ответ 1
Вот предупреждение, которое вы получаете:
warning: property ‘foo’ requires method '-foo' to be defined - use @synthesize, @dynamic or provide a method implementation
Чтобы подавить это предупреждение, имейте это в своей реализации:
@dynamic foo;
Ответ 2
Если что-то объявлено в вашем интерфейсе категории, его определение относится к вашей категории.
Ответ 3
Я написал две статьи об этом, хотя концепция немного отличается от вопроса, который вы задаете.
Это намного лучше, чем метод swizzling, по крайней мере: безопаснее.