IOS中Cocoa对象的内存管理初探(简介)

在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,负责对象的管理。

在手动引用计数模式下,对象的释放需要遵循下述原则:

  1. 如果通过分配和初始化的方法创建了对象[alloc,init方法创建],则需负责该对象的释放;
  2. 如果持有了对象[retain],也需负责该对象的释放;
  3. 如果拷贝了对象[copy],也需负责该对象的释放;
  4. 为了避免循环引用,子对象不应该持有父对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值