一、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
|