Подтвердить что ты не робот

Objective-C categories: Можно ли добавить свойство для метода, не входящего в мою категорию?

Я хочу использовать категорию, чтобы сделать метод в исходном классе доступным как свойство.

Класс A:

@interface ClassA
- (NSString*)foo;
@end

Класс A категория

@interface ClassA (Properties)
- (void)someCategoryMethod;
@property (nonatomic, readonly) NSString *foo;
@end

Теперь, когда я это делаю, он работает ( EDIT: Возможно, он не работает, он не жалуется, но я вижу странность), но он дает мне предупреждения, потому что я не синтезируя свойство в моей реализации категории. Как сообщить компилятору, что все на самом деле просто отлично, поскольку исходный класс синтезирует для меня свойство?

4b9b3361

Ответ 1

Вот предупреждение, которое вы получаете:

warning: property ‘foo’ requires method '-foo' to be defined - use @synthesize, @dynamic or provide a method implementation

Чтобы подавить это предупреждение, имейте это в своей реализации:

@dynamic foo;

Ответ 2

Если что-то объявлено в вашем интерфейсе категории, его определение относится к вашей категории.

Ответ 3

Я написал две статьи об этом, хотя концепция немного отличается от вопроса, который вы задаете.

Это намного лучше, чем метод swizzling, по крайней мере: безопаснее.