Автоматический подсчет ссылок и синтезированные свойства - PullRequest
3 голосов
/ 12 декабря 2011

При использовании ARC для iOS, есть ли разница между следующим?

@property (strong, nonatomic) NSObject *someProperty;
...
@synthesize someProperty;

//and then in the init method, either:
self.someProperty = aProperty;

//or
someProperty = aProperty;

Я знаю, что без ARC self.someProperty фактически вызывает метод синтезированного сеттера, который отправляет сообщение retainпредмет.Но теперь с ARC, имеет ли значение, если я использую точечную нотацию для установки свойства, подобного этому?

В более общем смысле, действительно ли ARC означает, что мне вообще не нужно беспокоиться о количестве ссылок?Или есть определенные ситуации, в которых способ написания моего кода может привести к ошибке ARC?

1 Ответ

6 голосов
/ 12 декабря 2011

Разница та же, что и в случае без ARC: с помощью точечной нотации вы вызываете синтезированный сеттер, и, присваивая непосредственно ивару, вы обходите метод сеттера.

ПодARC, нет никаких различий в управлении памятью между этими двумя опциями, но вы все равно должны принять осознанное решение между этими двумя опциями: например, непосредственное присвоение ivar обходит KVO, в то время как прохождение метода setter немного медленнее, но, вероятно, безопаснее вВ большинстве случаев, например, когда вы позже решаете присвоить свойству atomic или переопределить установщик.

Лично я всегда буду использовать обозначение свойства self.abc = ...;, за исключением, возможно, init, где часто желательноОбход КВО.Короче говоря, используйте те же рассуждения, которые вы использовали до ARC.

...