陈斌彬的技术博客

Stay foolish,stay hungry

iOS-怎样选择@property属性

正文:

1. readonly / readwrite

readonly和readwrite的区别就在于是否可写,如果用代码实现,也就是readonly不会生成setter,而readwrite会生成。如果定义的属性需要外部不可写,则使用readonly。(注意:readonly仅限于外部不可写,内部可通过_var的方式来访问)

2. retain / assign / copy

在非ARC的模式下,属性的内存需要自行管理,也就是需要自己retain/release。

retain:编译器会自行生成setter中管理内存的代码。 assign:直接赋值,不需要内存管理操作

简单/复杂数据类型(int、float、double、NSInteger、struct)

delegate指针(避免重复引用)

SEL(@selector)

3. strong / weak

在ARC模式下,“替代“retain / assign的就是strong / weak(强引用/弱引用)。

4. atomic / nonatomic

atomic / nonatomic表示是否是线程安全(是否需要加锁)。如果是atomic,那么就是线程安全的情况,因为访问资源时,都会加锁,所以会降低多线程访问效率。