一位朋友告诉我,标量属性(bool、nsinteger等)的@property默认值是非原子的。即。,

@property BOOL followVenmo;

默认为
@property (nonatomic) BOOL followVenmo;

但是,我总觉得默认值总是原子的,标量的还是没有的。
是哪个?

最佳答案

注意这个“标量”术语。NScSt**属性也是一个指针,就像您给BooL提供的指针一样。
从苹果文档(ObjuleC编程语言)
如果指定retaincopy并且不指定nonatomic,那么在引用计数的环境中,对象属性的合成get访问器使用锁并保留和自动还原返回值。实现将类似于以下内容:
[_internal lock]; // lock using anobject-levellock
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/

10-09 05:57
查看更多