一位朋友告诉我,标量属性(bool、nsinteger等)的@property默认值是非原子的。即。,
@property BOOL followVenmo;
默认为
@property (nonatomic) BOOL followVenmo;
但是,我总觉得默认值总是原子的,标量的还是没有的。
是哪个?
最佳答案
注意这个“标量”术语。NScSt**属性也是一个指针,就像您给BooL提供的指针一样。
从苹果文档(ObjuleC编程语言)
如果指定retain
或copy
并且不指定nonatomic
,那么在引用计数的环境中,对象属性的合成get访问器使用锁并保留和自动还原返回值。实现将类似于以下内容:[_internal lock]; // lock using an
object-level
lock
id result = [[value retain] autorelease];
[_internal unlock];
return result;
不能在非对象的对象中应用对象级锁,因此(非)原语类型的原子属性基本上没有影响。
您可以得出结论,atomic只适用于对象属性,这在文档中得到了加强:
如果指定nonatomic
,则对象属性的合成访问器只需直接返回值。
为了澄清是否应该指定一个或另一个:从技术上讲,没有nonatomic
的属性被认为是原子的,但是请记住,它对于原始类型没有意义。因此,您可能需要保存一些键入内容,并避免在这些内容中使用nonatomic
。
关于objective-c - Objective-C:标量属性的默认值为atomic?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6837334/