IOS中Cocoa对象的内存管理初探(简介)
2015-06-18 12:16
330 查看
在Cocoa对象的生命周期中,有创建、初始化、被使用、被持有或拷贝、被释放(release或dealloc)等过程。
与Java具有垃圾收集(GC:即Gabage Collection)的机制不同,IOS中,对象的管理需要通过对象的引用计数(Retain Count)来标识。
对象的引用计数用于标识对其感兴趣的对象的书目,在使用alloc、init方法初始化对象之后,会置该对象的引用计数为1.在使用方法调用时,对象的引用计数的变化如下表1:
表1. 方法调用过程中对象的引用计数值变化表
方法名 引用计数值
alloc/init 1
retain/copy +1[表示加1]
release -1[表示减1]
dealloc 0[释放对象]
上面的方法调用属于手动引用计数(MRC:Munual reference counting)模式,之后苹果在ios 5中推出了自动内存管理功能,简称为ARC(Automatic reference counting).在创建对象时,使用autorelease 方法,之后对象的管理交由编译器完成。编译器会自动跟踪对象的使用和引用情况,在编译阶段在代码当中插入合适的retain,release方法,减轻了程序员的负担。
编译器在实现对象的自动管理时,会将autorelease方法创建的对象放进最近的Autorelease Pool(自动释放池)当中。由自动释放池来负责对象的管理,自动释放池本身可以嵌套和释放。在作用域结束时,会释放自动释放池,其中的对象会随之释放。程序的生命周期作用域内,会由Application Kit自动创建一个AutoreleasePool,负责对象的管理。
在手动引用计数模式下,对象的释放需要遵循下述原则:
如果通过分配和初始化的方法创建了对象[alloc,init方法创建],则需负责该对象的释放;
如果持有了对象[retain],也需负责该对象的释放;
如果拷贝了对象[copy],也需负责该对象的释放;
为了避免循环引用,子对象不应该持有父对象。
与Java具有垃圾收集(GC:即Gabage Collection)的机制不同,IOS中,对象的管理需要通过对象的引用计数(Retain Count)来标识。
对象的引用计数用于标识对其感兴趣的对象的书目,在使用alloc、init方法初始化对象之后,会置该对象的引用计数为1.在使用方法调用时,对象的引用计数的变化如下表1:
表1. 方法调用过程中对象的引用计数值变化表
方法名 引用计数值
alloc/init 1
retain/copy +1[表示加1]
release -1[表示减1]
dealloc 0[释放对象]
上面的方法调用属于手动引用计数(MRC:Munual reference counting)模式,之后苹果在ios 5中推出了自动内存管理功能,简称为ARC(Automatic reference counting).在创建对象时,使用autorelease 方法,之后对象的管理交由编译器完成。编译器会自动跟踪对象的使用和引用情况,在编译阶段在代码当中插入合适的retain,release方法,减轻了程序员的负担。
编译器在实现对象的自动管理时,会将autorelease方法创建的对象放进最近的Autorelease Pool(自动释放池)当中。由自动释放池来负责对象的管理,自动释放池本身可以嵌套和释放。在作用域结束时,会释放自动释放池,其中的对象会随之释放。程序的生命周期作用域内,会由Application Kit自动创建一个AutoreleasePool,负责对象的管理。
在手动引用计数模式下,对象的释放需要遵循下述原则:
如果通过分配和初始化的方法创建了对象[alloc,init方法创建],则需负责该对象的释放;
如果持有了对象[retain],也需负责该对象的释放;
如果拷贝了对象[copy],也需负责该对象的释放;
为了避免循环引用,子对象不应该持有父对象。
相关文章推荐
- iOS第三方(ActionSheet)-JTSActionSheet
- iOS开发中用到的高效的宏定义
- IOS代码获取内存大小
- ios Notification 与多线程
- iOS中的动画
- openssl ios 公钥分段加解密
- iOS代码技巧之判断设备及状态
- IOS 时间 日历 处理集合
- iOS 中^block 示例
- ios图片拉伸方法
- IOS之Core Foundation框架和Cocoa Foundation框架的区别
- iOS开发系列--Grand Central Dispatch 基础教程:Part 1/2
- IOS cell 分割线从边框顶端开始
- [ios] compile exception about ARC
- iOS开发用到的强大的开源工具
- iOS链接错误,Undefined symbols for architecture arm64:std::__1::basic_string<char, std::__1::char_traits<
- iOS 复选框风格转换 Switchery 开关效果
- IOS项目自动生成技术文档
- iOS 静态代码扫描
- xmpp的一些常识