一位朋友告诉我,标量属性(BOOL、NSInteger 等)的 @property 默认值是非原子的。 IE。,
@property BOOL followVenmo;
默认为
@property (nonatomic) BOOL followVenmo;
但是,我始终认为默认值始终是原子的,无论是否是标量。
是哪一个?
请小心这个“标量”术语。 NSString * 属性也是一个指针,与您提供的带有指向 BOOL 的指针的示例完全相同。
来自 Apple 文档:(Objective-C 编程语言)
如果您指定retain
or copy
并且不指定nonatomic
,然后在引用计数环境中,合成 get 访问器对象属性 uses a lock and 保留并自动释放返回值- 实施将类似于以下内容:
[_internal lock]; // lock using an
object-level
lock
id result = [[value retain] autorelease];
[_internal unlock];
return result;
你不能在非对象的东西上应用对象级锁,所以(非)原子在基本类型的属性中基本上没有影响。
你可以得出结论atomic仅适用于对象属性,并且在文档中对此进行了强化:
如果您指定nonatomic
, a 合成访问器对象属性只是直接返回值。
为了澄清您是否应该指定一个或另一个:从技术上讲,属性没有nonatomic
被考虑atomic,但请记住它对于原始类型没有任何意义。因此,您可能希望节省一些打字并避免nonatomic
在这些。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)