为什么物业总是被认为在Objective C中是非primefaces的?

据说nonatomic选项会使你的setter方法运行得更快。 我GOOGLE了,但不能理解。 有人能告诉我为什么吗?

声明一个属性atomic使编译器生成额外的代码,防止并发访问属性。 这个额外的代码locking一个信号量,然后获取或设置属性,然后解锁信号量。 与设置或获取原始值或指针相比,locking和解锁信号量是昂贵的(尽pipe如果考虑应用程序的整体stream程通常可以忽略不计)。

由于在iOS下的大多数类,尤其是与UI相关的类,将被用在单线程环境中,因此放置atomic是安全的(即,写入nonatomic ,因为属性默认为atomic ):即使操作相对便宜,你不想为你不需要的东西付钱。

看到目标c中的primefaces和非primefaces之间的差异

primefaces

primefaces是属性的默认行为; 通过不明确地将上述属性设置为非primefaces的,它将是primefaces的。

一个atomic属性在获取或设置值时增加了一个线程安全级别。 也就是说,无论其他线程在做什么,该属性的getter和setter将始终完全完成。 权衡是这些属性比非primefaces等价物要慢一些。

非primefaces

非primefaces性属性不是线程安全的,将直接返回它们的属性。 这将比primefaces性质更快,但如果不采取预防措施,显然会带来一些风险。

 @property (strong) NSString *str; 

primefaces是属性的默认行为; 通过不明确地将上述属性设置为非primefaces的,它将是primefaces的。

setter&getter这些primefaces属性

 -(NSString *) str{ @synchronized(self){ return str; }} -(void) setStr: (NSString *) newString { @synchronized(self)  { str = newString; }} 

一个atomic属性在获取或设置值时增加了一个线程安全级别。 也就是说,无论其他线程在做什么,该属性的getter和setter将始终完全完成。 这些属性的访问速度会比非primefaces的速度慢一些。

 @property (strong,nonatomic) NSString *str; 

非primefaces性属性不是线程安全的,将直接返回它们的属性。 这将比primefaces性质更快,但如果不采取预防措施,显然会带来一些风险。

setter&getter为这些Nonatomic属性

 -(NSString *) str{ return str; }} -(void) setStr: (NSString *) newString{ str = newString; } 

所以通过寻找primefaces和非primefaces的setter&getter方法, primefaces方法的重量非常轻。