В Objective-C с ARC, верно ли, что нам обычно нужно указывать неатомические атрибуты свойств?
Странно, что в книге Big Nerd Ranch iOS 5 (стр .73) и в книге программирования iOS 5 (O'Reilly, стр .314) (updadte: даже Kochan Objective-C книга Четвертое издание), в контексте ARC они говорят, что атрибут свойства по умолчанию assign
... Но Документация Apple говорит, что значение по умолчанию strong
.
Я также пробовал простую программу, где, если я не укажу strong
, программа работает нормально, и если я укажу strong
, она будет работать одинаково, а когда вместо assign
будет использоваться компилятор, предупреждение, поэтому кажется, что по умолчанию действительно strong
.
Поэтому, если большую часть времени мы хотим
@property (nonatomic, readwrite, strong) NSMutableArray *foo;
то мы можем просто написать
@property (nonatomic) NSMutableArray *foo;
так как остальные два (readwrite
и strong
) по умолчанию?
Ответы
Ответ 1
readwrite и strong, действительно являются стандартными для ARC *. Под ручным подсчетом ссылок присваивание было (есть) по умолчанию. Я предпочитаю явно указывать их, потому что он дает более четкое представление о параметрах @property вместо того, чтобы полагаться на человека, читающего код, зная, что такое значения по умолчанию.
* strong - это значение по умолчанию, предполагающее, что вы либо разрешаете компилятору синтезировать переменную экземпляра для вас, либо объявили переменную экземпляра без явного классификатора прав (в этом случае ivar равен __strong
по умолчанию в любом случае). В противном случае тип собственности по умолчанию соответствует квалификатору собственности в декларации ivar. Итак, если вы явно объявляете ivar с помощью __weak
, тогда объявите @property для него без квалификатора собственности, синтезируемое свойство будет слабым. Все это описано в документации Clang ARC.
Ответ 2
По умолчанию свойство объекта strong, atomic, readwrite
. Видеть
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html