Будьте осторожны с этой «скалярной» терминологией. Свойство NSString * также является указателем, точно так же, как в примере, который вы указали для BOOL.
Из документов Apple: (язык программирования Objective-C)
Если вы укажете retain
или copy
и не укажите nonatomic
, то в среде с подсчетом ссылок получится синтезированное значение средство доступа к свойству объекта использует lock , а сохраняет и автоматически высвобождает возвращаемое значение - реализация будет похожа на следующее:
[_internal lock]; // lock using an
object-level
lock
id result = [[value retain] autorelease];
[_internal unlock];
return result;
Вы не можете применить блокировку уровня объекта к чему-то, что не является объектом, поэтому (не) атомарный в свойствах примитивных типов в основном не имеет никакого эффекта.
Можно сделать вывод, что atomic применяется только к свойствам объекта, и это подтверждается в документах:
Если указать nonatomic
, синтезированный метод доступа для свойства объекта просто возвращает значение напрямую.
Чтобы уточнить, следует ли указывать одно или другое: технически свойства без nonatomic
считаются атомарными , но помните, что это не имеет значения для примитивных типов. Таким образом, вы можете сохранить некоторые наборы и избегать nonatomic
в них.