在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],也需负责该对象的释放; 为了避免循环引用,子对象不应该持有父对象。 总结以上是内存溢出为你收集整理的IOS中Cocoa对象的内存管理初探(简介)全部内容,希望文章能够帮你解决IOS中Cocoa对象的内存管理初探(简介)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)