以下为本人自我理解
属性 | 说明 |
assign | (默认类型)生产一个简单的setter的方法 |
copy | 将对象复制到实例变量 |
Nonatomic | 与程序的多线程开发有关,一般设置成关闭 |
readonly | 指明类中的成员变量是只读的,不能执行写入操作 |
readwirte | (默认类型)类中的成员变量可读写 |
retain | 在setter的时候该调用retain,增加该变量的引用计数器 |
定义一个对象
在h文件中声明:
@property (nonatomic,retain)NSString *City;///结果
在m文件中合成生成器:
@synthesizeCity =_City;
iOS 5 中对属性的设置新增了strong 和weak关键字来修饰属性
strong 用来修饰强引用的属性;
@property (strong) SomeClass * Object;相当于原来的
@property (retain) SomeClass * Object; 和 @property (copy) SomeClass * Object;
weak 用来修饰弱引用的属性;
@property (weak) SomeClass * Object;
相当于原来的
@property (assign) SomeClass * Object;
强引用和弱引用的区别是对象是否被释放,在没用强引用指向它的时候。即使有弱引用指向它,如果最后一个强引用没了,对象还是会被释放,并且所有存在的弱引用会被置零。
我们在使用代理的时候是弱引用
总结:
我们对于BOOL、数字类型以及id等编译器生成的setter的方法默认是赋值的。
对于NSString,NSArray,UIViewContriller等对象类型则需要retain或者copy。
编译器默认生成setter和getter,方法是线程安全的,大多数iphone程序并不使用多线程,大部分在UIKit里面循环进行的,
所以许多属性可以设置成非线程安全的修饰词nonatomic,即非原子变量,这样线程是非线程安全的,但是能得到更好的性能。