A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一、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机制下,如果
  1.     @autoreleasepool {
  2.         Student *st = [Student studentWithAge:24];
  3.        // __strong Student *st2 = st;
  4.        // Student st2 = st;
  5.         //在ARC机制下:对象没有强指针指向,会立即释放
  6.         //弱指针会被赋值为nil
  7.         __weak Student *st3 = st;
  8.     }
复制代码
四、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



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马