Я всегда думал, что нельзя объявить свойство объекта в категории. До тех пор, пока мой партнер не сделал это в коде нашего приложения, и это, казалось, сработало.
Я пошел на SO и Google запоем, чтобы попытаться объяснить ему, что нет, категории Objective-C могут использоваться только для добавления методов, а не свойств . Я нашел такие вопросы, как:
Но затем я обнаружил эта ссылка на сайте Apple, которая содержит следующее о объявлении @property:
Объявление свойства начинается с ключевое слово @property. @property может появляются где угодно в методе список деклараций найден в @ интерфейс класса. @property может также фигурируют в декларации протокол или категория . (курсив добавлен)
Я знаю, что это не работает:
@interface MyClass ()
NSInteger foobar;
- (void) someCategorizedMethod;
@end
Но это компилирует:
@interface MyClass ()
@property NSInteger foobar;
- (void) someCategorizedMethod;
@end
Мой вопрос: (а) что здесь лучше всего? и (б) это что-то новое для Objective-C 2.0, и вместо использования «настоящего» iVar он просто использует скрытое ассоциативное хранилище для выполнения этой работы?