@property的参数(2)

上一篇文章讲解了@property的一些属性是什么意思,本文将讲解下该怎样选择@property属性。其中包括:readonly / readwrite、retain / assign、strong / weak、atomic / nonatomic。

环境信息:

Mac OS X 10.9

Xcode 5.1.1

正文:

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)

对于copy的使用,还请参考《copy和mutableCopy详解》

3. strong / weak

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

4. atomic / nonatomic

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

发表评论

电子邮件地址不会被公开。