OC内存管理(二)--MRC
来源:互联网 发布:中韩萨德问题 知乎 编辑:程序博客网 时间:2024/06/04 18:16
上篇讲述了ARC(自动内存管理),这篇了解一下ARC之前的故事。
1.引用计数 – Objective-C中的内存管理
举个例子:有一条狗(对象生成),一个人拿条绳索牵着它,它的引用计数为1,又来了一个人,又用一根绳索牵着它,它的引用计数就是2,再来一个人再系上引用计数就是3。当一个人离开的时候,它就放开了手中的绳索,此时它的引用计数为2,当最后一个人放开绳索的时候引用计数为0,狗狗就被释放了。
2.内存管理的思考方式
- 自己生成的对象自己持有
- 非自己生成的对象自己也可以持有
- 不再需要自己持有的对象的时候释放
- 非自己持有的对象无法释放
对象操作与Objective-C方法的对应
对象操作 ——> Objective-C方法
生成并持有对象 —–> alloc/new/copy/mutableCopy等方法
持有对象 —–> retain 方法
释放对象 —–> release 方法
废弃对象 —–> dealloc 方法
3.思考方式详解
- 生成并持有对象(alloc/new/copy/mutableCopy等方法)
只以alloc为例
/** * 自己生成并持有对象 */ NSObject *obj = [[NSObject alloc] init]; /** * 自己持有对象 */
- 持有对象(retain 方法)
上面有自己生成并持有对象 这里举个非自己生成并持有对象
/** * 取得非自己生成并持有对象 */ id obj = [NSMutableArray array]; /** * 取得的对象存在但自己不持有 */
/** * 取得非自己生成并持有对象 */ id obj = [NSMutableArray array]; /** * 取得的对象存在但自己不持有 */ [obj retain]; /** * 自己持有对象 */
那自己如何写非自己生成但存在的对象方法呢,以下便是啦
- (id)object{ id obj = [[NSObject alloc] init]; /** * 自己持有对象 */ [obj autorelease]; /** * 取得的对象存在但自己不持有 */ return obj;}
- 释放对象(release 方法)
/** * 自己生成并持有对象 */ NSObject *obj = [[NSObject alloc] init]; /** * 自己持有对象 */ [obj release]; /** * 释放对象 指向对象的指针仍然被保留在变量obj中,貌似能够访问 但对象一经释放绝对不可访问 */
其中release方法一经调用对象立即被释放,autorelease则是使对象在超出指定的生存范围时能够自动并正确地释放
- 废弃对象(dealloc 方法)
–总结自《Objective-C高级编程 - iOS与OS X多线程和内存管理》 黎华 译
1 0
- OC内存管理(二)--MRC
- OC 内存管理之MRC
- OC-内存管理(MRC)代码规范
- OC内存管理--MRC&ARC
- OC内存管理 MRC与ARC
- OC通讯录(MRC手动管理内存)
- OC中内存管理之MRC
- OC的内存管理方式----MRC & ARC
- OC中的内存管理—MRC
- OC中的MRC内存管理方式
- OC加强DAY01 - 内存管理MRC
- OC-025.OC手动MRC内存管理@property的使用方法
- MRC内存管理(二)数组、控件
- OC内存管理二
- 黑马程序员------OC 内存管理MRC和autorelease pool
- 黑马程序员---OC内存管理中的MRC
- 黑马程序员---OC基础---内存管理(MRC、ARC)
- OC-049.集合中的内存管理(MRC和ARC)
- sublime实用快捷键
- 【运维日记 A】第一次安装modsecurity+linux
- opencv学习笔记(三十四)内存和序列
- 基于Django1.8.2文档,编写第一个Django应用(6)
- Oracle12c的安装
- OC内存管理(二)--MRC
- Hibernate初识
- 项目架构开发:数据访问层之UnitOfWork
- 并查集变式 POJ 1703 Find them,Catch them
- OgnlContext对象
- 类型转换四个关键字
- 下载安装mysql-5.7.16.0
- 用Android studio创建手机信息页面并实现国际化
- 友盟分享 | 移动大数据平台架构思想以及实践经验