Есть определенные обстоятельства, при которых он обычно унывали использовать self.
-expression доступа к свойству. Обычновсегдаиспользованиеself
для любого доступа к собственности. Это самый безопасный и несложный способ. Особенно, если вы использовали сохранение, то управление памятью будет сделано для вас.
два исключения из этого правила:
- Любой
init
метод.
- В
dealloc
.
В обоих случаях вы имеете дело с частично инициализированным объектом. Есть некоторые побочные эффекты, которые могут возникать при использовании сеттеров или геттеров здесь, потому что они являются методами и, следовательно, могут быть переопределены.
Например, возьмите класс A
со свойством foo
, который был наследником классом B
. Подкласс B
добавляет свойство bar
и перенастраивает сеттер для foo
. Теперь ваш -метод вызывает setFoo:
, потому что вы использовали self.foo = ...
с некоторым начальным значением. Подкласс, однако, также получает доступ к значению bar
в этом сеттере. Но в этом случае может случиться так, что бар никогда не был инициализирован и указывает на некоторые произвольные данные. Вызов сеттера в init моей причины приводит к сбою, хотя вероятность может быть не слишком высокой в вашем собственном коде.
, так что оно похоже на выражение Java 'this', которое не всегда требуется, если не имеет дело с переменными с тем же именем. – binnyb
Вы верны. –
Важным отличием является то, что 'self.str1 = @" abc "' будет использовать метод accessor ('setStr1:'), но 'str1 = @" abc "' не будет. При использовании свойств с атрибутом 'Сохранить' это различие имеет решающее значение. Таким образом, это действительно не «идентично Java' this' ». –