如果可以的话,我只是一个简单的问题,我总是(自学习obj-c)写出如下的int属性......
@property(nonatomic, assign) int myValue;
我现在认为这可能有点过头了,我不妨写下来......
@property int myValue;
好奇,我知道“assign”是默认行为,“nonatomic”可以快一点......
一切顺利
加里
答案 0 :(得分:35)
@property(nonatomic, assign) int myValue;
与
不同@property int myValue;
属性的默认值是atomic(没有显式关键字atomic
)。所以第二个例子是原子属性。对于原始类型的属性,我不知道是否发生任何锁定,但可能会引入内存写屏障(即,setter将强制将值写回主存储器,而不是仅写入缓存)。因此原子特性比非原子特性慢得多。但是,作为该计划总执行时间的一小部分,它们仍然可以代表非常小的百分比。在您分析代码之前,您不会知道。
答案 1 :(得分:8)
嗯,声明原子性的问题与您是否显式声明默认属性是一个单独的问题。前者将取决于您的代码的性质 - 是否可能存在有争议的多线程访问属性?
关于后者,它主要是一种风格问题,但总的来说,我认为你应该在明确的清晰度方面犯错误。输入那些额外的几次击键,你的生命中究竟要花多少秒?
答案 2 :(得分:2)
Nonatomic生成的代码更少,速度更快。我确实同意它非常冗长。
如果您的应用程序可能使用多个线程,那么当您遇到奇怪的错误时,您会很高兴放置这些明确的限定符...