前言
目前为止,我们讲过的@property参数一共有5组:
一、atomic和nonatomic,与多线程相关的两个参数,atomic是默认值,代表生成的setter方法和getter方法是线程安全的。。。加了安全锁了,特点就是安全,但是效率低下。。。nonatomic不安全,但是效率高,这两个参数,无论在MRC还是ARC里面,都可以使用,使用建议是不管在MRC还是ARC,通通使用nonatomic
二、assign和retain,## 1、retain只能用在MRC的机制下,代表生成的setter方法,是标准的内存管理代码,release旧的,retain新的,if(_car != car)
{
[_car release];
_car = [car retain];
}
在MRC的模式下,什么时候用retain呢,当这个属性的类型是OC对象的时候,用retain,绝大多数情况下,使用这个retain,只有在出现了循环引用的时候,1边用retain,另1边用assign。
2、assign在ARC和MRC的模式下,都可以使用assign,当属性的类型是1个非OC对象的时候,使用assign
三、readonly和readwrite,无论是MRC还是ARC都能使用,如果你希望生成只读的属性,那么你就用readonly,如果你希望生成读写的属性,那么你就用readwrite
四、setter和getter,修改生成的setter方法和getter方法的名字,无论在MRC还是在ARC下都能修改,什么情况下都不要去改setter方法的名字,只有在属性的类型是BOOL类型的时候,才去修改getter方法的名字,改成is开头,提高代码的阅读性
五、strong和weak
1、strong只能用在ARC的模式下。当属性的类型,是OC对象类型的时候,绝大多数情况下,使用strong,只有出现了循环引用的时候,1端strong,1端weak
2、weak只能用在ARC机制下,当属性的类型是OC对象的时候,并且只有出现了循环引用的时候,1端strong,1端weak
六、总结
1、从内存管理的角度,我们开发程序分为ARC和MRC两种状态,你要知道两种状态的区别是什么,唯一的区别就是,一个是手动,一个是自动。ARC是自动,MRC你可能就要手动的去管那个引用计数器了。。。
2、在ARC机制下,原来使用retain的地方,用strong,出现循环引用的时候,在MRC当中,1边retain,另1边assign,在ARC当中,1边strong,另1边weak