Еще одно правильное использование вопроса о @property - PullRequest
1 голос
/ 19 ноября 2008

Это продолжение Избегание @ property-itis .

UIWebView имеет следующие объявления свойств:

@property(nonatomic,readonly,getter=canGoBack) BOOL canGoBack;
@property(nonatomic,readonly,getter=canGoForward) BOOL canGoForward;

UIScrollView имеет эти:

@property(nonatomic) BOOL canCancelContentTouches;

Пока что у UIResponder есть

- (BOOL)isFirstResponder;
- (BOOL)canBecomeFirstResponder;
- (BOOL)canResignFirstResponder;

Является ли случай UIResponder тем, где они должны были быть объявлены как свойства, но по какой-то причине не были?

Или это тот случай, когда объявление их как объекта недвижимости неуместно? Если неуместно, почему?

Ответы [ 3 ]

1 голос
/ 19 ноября 2008

Синтезированные свойства определяют способ доступа к свойствам. Использовать или не использовать синтезированные свойства - проектное решение, поскольку правильно реализованные методы получения и установки обеспечивают одинаковую функциональность.

Поскольку рассматриваемый метод (методы) может быть правильно реализован с использованием доступных атрибутов свойств, нет никаких причин, по которым их нельзя переписать для этого.

1 голос
/ 19 ноября 2008

Мое лучшее предположение заключается в том, что UIResponder предназначен для соответствия NSResponder, который, конечно, был разработан до введения свойств Objective-C 2.0. Почему UIWebView не делает то же самое в отношении WebView, я не знаю. Я ожидал бы, что свойства в Какао будут немного шизофреничными в этом отношении в течение некоторого времени, и я не стал бы слишком много думать об этом, рассматривая ваш собственный код.

0 голосов
/ 20 ноября 2008

Свойство должно отображаться, если не точно, интуитивно, на некоторый механизм хранения вашего класса - будь то ивар, объявленный в вашем @interface, или что-то, синтезированное средой выполнения. Вызов метода, такого как canBecomeFirstResponder, не обязательно должен запрашивать у класса механизм хранения, который содержит тривиальный BOOL, а скорее вызывает некоторую цепочку событий, которая запрашивает дерево респондента. То есть firstResponder ivar отсутствует, так как значение любого из этих методов не может быть сохранено в кеше и должно быть определено во время их выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...