码迷,mamicode.com
首页 > 移动开发 > 详细

iOS复习笔记9:ARC功能

时间:2015-01-30 10:49:18      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:objective-c   ios   内存管理   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

iOS复习笔记9:ARC功能

标签:objective-c   ios   内存管理   arc   

原文地址:http://blog.csdn.net/xufeng0991/article/details/43303079

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!