С каких это пор можно объявлять свойства Objective-C 2.0 в категории?

Я всегда думал, что нельзя объявить свойство объекта в категории. До тех пор, пока мой партнер не сделал это в коде нашего приложения, и это, казалось, сработало.

Я пошел на 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 он просто использует скрытое ассоциативное хранилище для выполнения этой работы?

14
задан Community 23 May 2017 в 10:29
поделиться