您的位置:首页 > 移动开发 > IOS开发

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],也需负责该对象的释放;

为了避免循环引用,子对象不应该持有父对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: