В некоторых случаях обычно не рекомендуется использовать выражение self.
для доступа к свойству. Обычно вы всегда используете self
для любого доступа к собственности. Это самый безопасный и несложный способ.Особенно, если вы использовали retain, то управление памятью будет выполнено за вас.
Два исключения из этого правила:
- Любой
init
метод. - В
dealloc
.
В обоих случаях вы имеете дело с частично инициализированным объектом.Существуют некоторые побочные эффекты, которые могут возникнуть при использовании сеттеров или геттеров, поскольку они являются методами и, следовательно, могут быть переопределены.
Например, , возьмите класс A
со свойствомfoo
, который был разделен на классы B
.Подкласс B
добавляет свойство bar
и отменяет установщик для foo
.Теперь ваш init
-метод вызывает setFoo:
, потому что вы использовали self.foo = ...
с некоторым начальным значением.Однако подкласс также получает доступ к значению bar
в этом установщике.Но в этом случае может случиться так, что бар никогда не был инициализирован и указывает на некоторые произвольные данные. Вызов сеттера в init моя причина вылетает , хотя вероятность может быть не слишком высокой в вашем собственном коде.