这是一个难点:
Attribute | Auto Genreate Get | Auto Genreate Set | Description | 应用场合 | |
readonly | Y | - | 只会自动生成Get 方法 | ||
readwrite | Y | Y | 自动生成Get, Set方法 | 对基础数据类型 (例如NSInteger,CGFloat)和C数据类型(int, float, double, char, 等) | |
Setter 语意 | assign(weak) | - | Y | 简单赋值,不更改索引计数,共享内存 | |
retain(strong) | - | Y | 简单赋值,更改索引计数,共享内存 | 你可以想象一个NSString实例,它是一个对象,retain是创建一个指针,引用对象计数加1。 | |
copy | - | Y | 用于非共享内存时,每个指针有自己的内存空间 | ||
原子性 | atomicity | ||||
nonatomic | 常用nonatomic和strong |
上面的内容涵盖了Objective-C基础教程的第九章,第十章,第十一章。
首先,我们知道@property和@synthesize是合在一起用的,请看下面的例子:
.h file @property int count; like - (int)count; -(void)setCount:(int)newCount; ##################################################################### .m file @synthesize count; like - (int)count { return count; } -(void)setCount:(int)newCount { count = newCount; }
其实@property就是为了生成Get和Set方法。
Objecive C不像Java和C#那样,有自己的垃圾回收机制,在ARC(Auto Reference Counting)出现前,我们要手动写retain(+1), release(-1)。
我们现在常用的是readonly, readwrite,weak,strong,nonatomic.
readonly表示只会生成Get方法
readwrite会生成Get和Set方法,主要是对那些没有指针应用的简单类型。
我们比较长用的方法是 @property (strong, nonatomic) XXClass *xxObject;
在程序中为了避免重复引用: 我们配合Strong和Weak使用。
Attribute | Auto Genreate Get | Auto Genreate Set | Description | 应用场合 | |
readonly | Y | - | 只会自动生成Get 方法 | ||
readwrite | Y | Y | 自动生成Get, Set方法 | 对基础数据类型 (例如NSInteger,CGFloat)和C数据类型(int, float, double, char, 等) | |
Setter 语意 | assign(weak) | - | Y | 简单赋值,不更改索引计数,共享内存 | |
retain(strong) | - | Y | 简单赋值,更改索引计数,共享内存 | 你可以想象一个NSString实例,它是一个对象,retain是创建一个指针,引用对象计数加1。 | |
copy | - | Y | 用于非共享内存时,每个指针有自己的内存空间 | ||
原子性 | atomicity | ||||
nonatomic | 常用nonatomic和strong |