--------ARC的使用
1.ARC的基本概念
ARC是Automatic Reference Counting自动引用计数,使用ARC,不再需要retain,release,autorelease,因为编译器会在合适的时候自动插入retain,release
ARC黄金法则:只要还有一个变量(指针)指向对象,对象就会保存在内存中.当指针指向新值,或者指针不再存在时,相关联的对象就会自动释放。这条规则对于实例变量、synthesize属性、本地变量都是适用的。
(1)ARC中,dealloc方法中不允许调用[super dealloc]。KVO和通知仍然需要在dealloc方法中移除
(2)ARC中,不允许用retainCount属性,打印引用计数
(3)ARC中,不允许使用retain、release、autorelease,copy可以使用
2.strong关键字的使用
strong强引用,strong修饰指向的对象,会将此对象retain
默认所有实例变量和本地变量都是strong类型的指针
3.weak关键字的使用
* 当一个弱引用指向的对象,未销毁时,向对象发送消息,会自动变为强引用
* 当一个弱引用指向的对象被销毁时,弱引用本身会自动的赋值为nil
__unsafe_unretained关键字等同于assign,功能和weak几乎一样
weak与__unsafe_unretained的相同点:他们修饰的变量,当给此变量赋值的时候,此变量不会自动插入retain操作
weak与__unsafe_unretained的区别:weak关键字指向的对象销毁掉以后,此变量会自动设置为nil,防止野指针调用。而用__unsafe_unretained关键字指向的对象销毁掉以后,次变量不会设置为nil,会导致野指针调用
weak关键字总结:weak可以防止循环引用,典型的例子是delegate模式,代理对象delegate应该设置成weak
4.property的修饰符总结
(1)strong:等同于”retain”,属性成为对象的拥有者
(2)weak:属性是weak pointer,当对象释放时会自动设置为nil,记住Outlet应该使用weak
(3)__unsafe_unretained:等同于之前的”assign”,只有iOS4才应该使用
(4)copy:和之前的copy一样,复制一个对象并创建strong关联
(5)assign:对象不能使用assign,但基本数据类型仍然可以使用
(6)注意:retain在ARC中也可以使用,但是不能单独对对象使用retain
5. MRC和ARC的混用
* 把MRC的代码转换成ARC的代码,删除内存管理操作(手动)
* 在ARC项目中继续使用MRC编译的类,在编译选项中标识MRC文件即可"-fno-objc-arc"
* 在MRC项目中继续使用ARC编译的类在编译选项中标识MRC文件即可"-fobjc-arc"