黑马程序员技术交流社区
标题: OC学习笔记之ARC的概念及原理 [打印本页]
作者: chunhuayun 时间: 2015-10-8 17:40
标题: OC学习笔记之ARC的概念及原理
一、ARC的概念及原理
1、指针的分类
1)强指针:默认情况下,所有的指针都是,关键字strong
2)弱指针:__weak关键字修饰的是弱指针
声明一个弱指针如下:
__weakPserson *p;
2、什么是ARC?
1)Automatic Reference Counting,自动引用计数,即ARC。在使用ARC非常简单,只要像往常那样编写代码,只不过永远不用写retain,release和autorelease这三个关键字就好了,这就是ARC的基本原则。XCode默认使用ARC
2)当ARC开启时,编译器将自动在代码合适的地方插入retain,release和autorelease,而作为开发者,完全不需要担心编译器会做错,除非开发者自己错用了ARC了。
3)ARC与其他语言的”垃圾回收“机制不同,【ARC是编译特性】,【垃圾回收是运行时特性】
3、ARC工作原理及判断准则
【ARC的判断准则】
只要没有强指针指向对象,对象就会被释放
【注意】当使用ARC的时候,暂时忘记【引用计数器】,因为判断标准变了
4、在ARC机制下:对象没有强指针指向,会立即释放
二、ARC快速入门
1、ARC机制判断
【注意】也可以直接查看项目信息,ARC是否是yes
1)不允许调用release方法
2)不允许调用autorelease
3)不允许调用[super dealloc],但是可以重写dealloc方法
4)不允许调用retainCount
三、ARC下单对象内存管理【重点】
1、在ARC机制下:对象没有强指针指向,会立即释放
2、在ARC机制下,如果
- @autoreleasepool {
- Student *st = [Student studentWithAge:24];
- // __strong Student *st2 = st;
- // Student st2 = st;
- //在ARC机制下:对象没有强指针指向,会立即释放
- //弱指针会被赋值为nil
- __weak Student *st3 = st;
- }
复制代码 四、ARC下循环引用问题
1、【解决方案】一端使用strong,一端使用weak
2、ARC下@property参数问题
【strong强指针】用于OC对象,相当于MRC中的retain
【weak弱指针】多用于UI控件
五、ARC使用特点及注意事项
1、ARC特点总结
1)不允许调用release,retain,retainCount
2)允许重写dealloc,但是不允许调用[super dealloc]
3)@property的参数:
strong:相当于MRC机制中的retain(适用于OC对象),成员变量是强指针
weak:相当于MRC机制中的assign(适用于OC对象),成员变量是弱指针
assgin:适用于非OC对象类型,即基础类型
2、ARC使用注意事项
1)ARC中,只要弱指针指向的对象不在了,就直接把弱指针做清空(赋值为nil)操作
2)__weak Person *p = [Person new];这样做不合理。对象一创建出来就会被释放掉,对象释放后,OC把指针设置为nil
3)ARC中在property参数处不在使用retain,而使用strong或weak,在dealloc中不在需要[super dealloc]
@property (nonatomaic, strong) Dog *dog;这意味着生成的成员变量_dog是一个强指针,相当于以前的retain
4)如果是一个弱指针,则要换成weak
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |