@property for int type?

时间:2010-10-19 10:41:32

标签: iphone objective-c cocoa-touch

如果可以的话,我只是一个简单的问题,我总是(自学习obj-c)写出如下的int属性......

@property(nonatomic, assign) int myValue;

我现在认为这可能有点过头了,我不妨写下来......

@property int myValue;

好奇,我知道“assign”是默认行为,“nonatomic”可以快一点......

一切顺利

加里

3 个答案:

答案 0 :(得分:35)

@property(nonatomic, assign) int myValue;

不同
@property int myValue;

属性的默认值是atomic(没有显式关键字atomic)。所以第二个例子是原子属性。对于原始类型的属性,我不知道是否发生任何锁定,但可能会引入内存写屏障(即,setter将强制将值写回主存储器,而不是仅写入缓存)。因此原子特性比非原子特性慢得多。但是,作为该计划总执行时间的一小部分,它们仍然可以代表非常小的百分比。在您分析代码之前,您不会知道。

答案 1 :(得分:8)

嗯,声明原子性的问题与您是否显式声明默认属性是一个单独的问题。前者将取决于您的代码的性质 - 是否可能存在有争议的多线程访问属性?

关于后者,它主要是一种风格问题,但总的来说,我认为你应该在明确的清晰度方面犯错误。输入那些额外的几次击键,你的生命中究竟要花多少秒?

答案 2 :(得分:2)

Nonatomic生成的代码更少,速度更快。我确实同意它非常冗长。

如果您的应用程序可能使用多个线程,那么当您遇到奇怪的错误时,您会很高兴放置这些明确的限定符...