int的setter / getter的正确属性是什么?

时间:2011-07-14 16:31:06

标签: iphone objective-c properties getter-setter

我已经看到了许多不同的方法来制作/合成一个int,但我不知道正确的方法。

我通常会这样做:

@property (nonatomic, assign) int myInt

但我见过人们使用:

@property (nonatomic) int myInt
@property int myInt

哪种方式正确?

4 个答案:

答案 0 :(得分:3)

以下是a great post about the difference between atomic and nonatomic

  

假设你是@synthesizing方法实现,原子   与非原子相比,生成的代码更改。如果你是自己写的   setter / getters,atomic / nonatomic / retain / assign / copy仅仅是   咨询。

     

使用原子,合成的setter / getter将确保整体   值始终从getter返回或由setter设置,   不管任何其他线程的setter活动。也就是说,如果是线程   A在getter的中间,而线程B调用setter,a   实际可行的价值 - 一个自动释放的对象,很可能 - 将是   返回给A的来电者。

     

在非原子能方面,没有这样的保证。因此,非原子是   比原子快得多。

     

什么原子不做是对线程安全做出任何保证。如果   线程A与线程B和C同时调用getter   调用具有不同值的setter,线程A可以获得任何一个   返回的三个值 - 在调用任何setter之前的值   或者传递到B和C中的setter中的任何一个值。同样,   对象最终可能会得到B或C中的值,无法分辨。

     

确保数据完整性 - 主要挑战之一   多线程编程 - 通过其他方式实现。

请注意,默认值为atomic,因此最后一个示例等同于

@property (atomic) int myInt

另一个默认值是assign,因此这两个选项是等效的:

@property (nonatomic, assign) int myInt
@property (nonatomic) int myInt

同样,以下也是等同的

@property (atomic, assign) int myInt
@property (atomic) int myInt

编辑:正如Josh所指出的,atomic被包含在内是一个假设的例子。

答案 1 :(得分:0)

默认值为assign和atomic

答案 2 :(得分:0)

这更像是一种风格问题而不是技术正确性问题。对于int类型,唯一具有assign修饰符为真(因为您不保留标量)。否则,它是特定于上下文的:readwrite或readonly,atomic或nonatomic,它取决于应用程序。

请注意,如果未指定修饰符,则应用默认值(atomic,readwrite,assign)。所以你的例子是第一个其他例子是相同的,第三个只是原子性不同。

答案 3 :(得分:0)

@property(nonatomic,assign)int myVariable;

始终记住assign将用于原始数据类型,如int,bool