iOS复习笔记9:ARC功能

一 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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。