一 ARC简介
ARC是编辑器的一种功能。
它会把alloc出来的对象,自动release。
它把使用retain属性的变量,在dealloc中自动生成release;
在新建项目时选中ARC功能后,不允许调用:
retain
retainCount
release
autorelease
[super dealloc]
二 ARC的判断准则
1 准则:只要没有强指针对象,就会销毁对象
2 指针分两种:
1 强指针: __strong,默认情况下所有的指针都是强指针
2 弱指针: __weak,弱指针指向的对象不存在时会被清空
三 强指针代码示例:
Person* p = [[Person] init]; p = nil;// 清空指针,没有强指针指向内存对象,对象就会释放
或者
p = [[Person] init];// 指针指向了另一个对象,前面分配的内存对象就是释放
Person* person1 = [[Person] init]; Person* person2 = person1; person1 = nil; // 函数执行完之后才销毁
弱指针代码示例:
Person* person1 = [[Person] init]; __weak Person person2 = p; person1 = nil;// 对象销毁
注意如下错误写法:
__weak Person* person1 = [[Person] init];// 会有警告,创建出来的对象会被立马释放
四 property属性参数
1 strong:用于OC对象,成员变量时“强”指针
strong替换retain,不需要在dealloc中release,功能跟retain一样
例如:
@property(nonatomic, strong) Book* book;
2 weak:用于OC对象,成员变量时“弱”指针
strong替换assign,book指向对象销毁时,会被自动清空
@property(nonatomic, weak) Book* book;
3 assign:用于基础数据类型
五 Xcode的ARC转换功能
1 项目转换成ARC
Edit->Refactor->Convert to Object-C ARC,check,next;
然后会出现一个预览,可以看到release,autorelease被删除了,
property的retain变成了strong。
然后点击Save,Enable,就OK啦。
2 兼容非ARC
点击项目->Build Phases:Complie Source,可以看到项目中的源文件,
选中不需要使用ARC的源文件回车,输入:
-fno-objc-arc
这样就可以在该文件中使用非ARC相关的东西了。
3 非ARC项目兼容ARC
在2中输入:
-f-objc-arc
这样在非ARC项目中,就可以兼容ARC文件了。
六 ARC中循环引用
相互持有的对象,将生命周期短的property设置为weak