黑马程序员---OC学习笔记之ARC的概念及原理
来源:互联网 发布:淘宝卖家钻石 编辑:程序博客网 时间:2024/05/29 17:26
一、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机制下:对象没有强指针指向,会立即释放
5、ARC机制判断
【注意】也可以直接查看项目信息,ARC是否是yes
1)不允许调用release方法
2)不允许调用autorelease
3)不允许调用[super dealloc],但是可以重写dealloc方法
4)不允许调用retainCount
6、ARC下单对象内存管理【重点】
1、在ARC机制下:对象没有强指针指向,会立即释放
2、在ARC机制下,如果
@autoreleasepool { Student *st = [Student studentWithAge:24]; // __strong Student *st2 = st; // Student st2 = st; //在ARC机制下:对象没有强指针指向,会立即释放 //弱指针会被赋值为nil __weak Student *st3 = st; }7、ARC下循环引用问题
1、【解决方案】一端使用strong,一端使用weak
2、ARC下@property参数问题
【strong强指针】用于OC对象,相当于MRC中的retain
【weak弱指针】多用于UI控件
8、ARC使用特点及注意事项
8.1、ARC特点总结
1)不允许调用release,retain,retainCount
2)允许重写dealloc,但是不允许调用[super dealloc]
3)@property的参数:
strong:相当于MRC机制中的retain(适用于OC对象),成员变量是强指针
weak:相当于MRC机制中的assign(适用于OC对象),成员变量是弱指针
assgin:适用于非OC对象类型,即基础类型
8.2、ARC使用注意事项
1)ARC中,只要弱指针指向的对象不在了,就直接把弱指针做清空(赋值为nil)操作
2)__weakPerson *p = [Person new];这样做不合理。对象一创建出来就会被释放掉,对象释放后,OC把指针设置为nil
3)ARC中在property参数处不在使用retain,而使用strong或weak,在dealloc中不在需要[super dealloc]
@property (nonatomaic, strong) Dog *dog;这意味着生成的成员变量_dog是一个强指针,相当于以前的retain
4)如果是一个弱指针,则要换成weak
9、ARC模式下如何兼容非ARC的类
方法:
设置MRC文件的【compiler flag】-fno-objc-arc
- 黑马程序员---OC学习笔记之ARC的概念及原理
- 黑马程序员---OC学习笔记之copy概念及入门
- 黑马程序员---OC学习笔记之分类(Catgory)的概念及使用
- 【黑马程序员】ARC概念及原理
- 黑马程序员-OC语言-封装的概念及原理(听课笔记)
- 黑马程序员---OC学习笔记之protocol概念及基本使用
- 黑马程序员-[OC]学习之旅-block和protocol的概念及使用
- 黑马程序员- IOS学习笔记-OC ARC、BLOCK、protocol
- 黑马程序员-OC学习笔记-----ARC和代码块block
- 黑马程序员IOS基础---OC学习之ARC
- 黑马程序员-[OC]学习之旅-ARC机制和类别
- 黑马程序员---OC学习笔记之NSDictionary的介绍及使用
- 黑马程序员——OC语言基础---封装的概念及原理
- OC学习笔记之ARC
- OBJ-C ARC概念及原理+分类 学习笔记
- 黑马程序员----OC学习笔记之NSArray
- 黑马程序员---OC学习笔记之block的基本概念
- 黑马程序员---OC学习笔记之block的使用场景
- 语义分析的一些方法(上篇)
- iOS 获取设备类型
- 退出app,后台推送的服务也停止了,怎么可以做到不停止后台服务呢?
- Objective-C:禁止调用方法
- 设计模式之Iterator:简单模拟java中集合类的实现
- 黑马程序员---OC学习笔记之ARC的概念及原理
- 弱校联萌十一大决战之强力热身 C.Censor (KMP变形 好题)
- jquery插件开发基础知识点
- HDOJ 1850 Being a Good Boy in Spring Festival(尼姆博奕,位运算小技巧)
- Linux目录结构
- Math
- C++实现Ping
- 使用Java调用以WSDL形式发布的web service
- 初识 Objective - C