Object-C内存 管理规则摘要

内存管理总结:

1.释放对象,可以释放它所占用的内存,如果你的程序在运行期间创建了很多对象,应该关注这些对象的释放。良好的规则就是,不再使用创建或保持的对象时,就释放它们。

2.发送一条release消息不一定销毁对象,当一个对象的引用计数变为0时,才销毁这个对象。系统通过向该对象发送一条dealloc消息来释放它所占用的内存。

3.自动释放池用于在释放池本身时自动释放池中的对象。每次释放池时,系统通过向池中的每一个对象发送一条release消息来实现这个功能。同时,系统会向池中每个引用计数为0的对象发送一条dealloc消息来销毁这个对象。

4.如果你的方法中不再需要一个对象,但是需要返回它,那么向其发送一条autorelease消息,将它标记为以后释放。消息autorelease并不影响对象的引用计数。因此,它允许消息的发送者使用这个对象,然后仍然在以后当自动释放池时,释放这些对象。

5.无论对象是否添加到自动释放池,应用程序终止时,都会释放程序中对象占用的所有内存。

6.开发更复杂的应用程序时(例如Cocoa应用程序),可以在程序的运行期间创建和销毁自动释放池(对Cocoa应用程序,每次发生一个事件,就会产生这种情况)。在这种情况下,如果想要保证在自动释放池被释放时对象仍然存在,则应该显式的保持它。如果对象的引用计数大于收到的autorelease消息数目,则在池被释放时会保留下来。

7.如果使用alloc或copy方法(使用allocWithZone:、copyWithZone:或mutableCopy方法)直接创建对象,则由你负责释放它。每次retain对象时,应该release或者autorelease它。

8.除上一个规则中提到的方法之外,不必费心地释放其他方法返回的对象。这不是你的责任;这些对象应当被他们的方法自动释放。这就是为什么首先需要在程序中创建自动释放池的原因。stringWithString:之类的方法自动向新创建的字符串对象发送一条autorelease消息,把它们添加到自动释放池。如果事先没有创建池,就会收到一条错误消息,这个消息通知你在没有池的情况下尝试自动释放对象。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值