七十八、基础框架(三十六)内存管理-关于内存管理规则的概括

本文详细阐述了内存管理中的关键概念,包括物件的release、autorelease操作,引用次数与自动释放池的作用,以及如何在程序中正确使用这些概念。重点讨论了如何避免内存泄漏,并在复杂程序中有效管理资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们  来概括一下   关于内存管理  我们所学到的东西:

  • 对物件  采取  release这项措施  可以使  这个物件  从内存中  被清理掉,如果  你  在程序执行的过程中  创建  大量的物件,你  就应该关心  这点。
  • 对物件  采取  release这项措施  并不必然将  物件  从内存中  清理掉。只有  在物件的引用次数  降至  0时,物件  才会被  从内存中  清理掉。当物件的引用次数  降至  0时,系统  会对这个物件  采取  dealloc这项措施,从而  将  其  清理掉。
  • 当自动释放池  被清理时,自动释放池中的物件  也会被清理。对物件  每采取  一次autorelease这项措施,清理  自动释放池时  系统  就会对池子中的物件  采取  一次release这项措施。
  • 在一项措施的实施过程中  如果  你  不再需要  某个物件,而  你  却需要将  这个物件  作为结果  传递回去,那么  你  可以对这个物件  采取  autorelease这项措施,将  其  添加  到自动释放池。autorelease这项措施  并不会改变  物件的引用次数。但是  对  物件  采取  autorelease这项措施后,清理  自动释放池时,系统  就会对这个物件  采取  release这项措施。
  • 当程序  中止的时候,内存中的所有物件  都会被清理掉,不管  他们  是不是  在自动释放池当中。
  • 当你  开发  更加复杂的程序时,比如  cocoa应用程序,自动释放池  在程序执行的过程中  可以创建  也可以清理掉。如果  你  希望  自动释放池  被清理的时候,其中  某些物件  保留下来,你  应该对这些物件  采取  retain这项措施,以增加  其引用次数。任何物件  如果  其引用次数  大于  对其采取autorelease这项措施的次数,那么  在清理  自动释放池时,这样的物件  就会被保留下来。
  • 如果  你  直接  采取  new、alloc、copy、allocWithZone:、copyWithZone:  或者  mutableCopy这些措施  创建  物件,那么  将  这些物件的引用次数  降至  0  就成为  你的责任了。每当你  采取  retain这项措施  增加  物件的引用次数,那么  相应地  你  就应该采取  release  或者  autorelease  手动地  或者  自动地  减少  物件的引用次数。
  • 如果  某些物件  是  某些措施  作为结果  传递给你的,你  就不用担心  如何清理  他们。因为  这些措施当中  已经对这些物件  采取了  autorelease这项措施。这  就是  为什么  在程序当中  第一件事  就是  创建  自动释放池。像  stringWithString:这样的措施  就会对它产生的字符串物件  采取  autorelease这项措施,从而  将  其  添加  到自动释放池。如果  你  没有创建  自动释放池,那么  你  就会被告知  你  试图  在没有  自动释放池的情况下  对物件  采取  autorelease这项措施。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值