A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zwcshy 中级黑马   /  2014-12-6 20:17  /  989 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

release与autorelease的区别

3 个回复

倒序浏览
1.如果能够真正的理解autorelease,那么才是理解了Objective c的内存管理。Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的Autorelease pool中,当该pool被释放时,该pool中的所有Object会被调用Release。

实际上对于 [NSString stringWithFormat:1.0] 这类构造函数返回的对象都是autorelease的。

2. autorelease pool来避免频繁申请/释放内存(就是pool的作用了)。这个应该是相对比较好理解的。

总结:(1)一定要注意Autorelease pool的生存周期,理解Runloop,避免在对象被释放后使用。

          (2)[NSString stringWithFormat]这类函数返回的对象是不需要再自己release的,它已经被autorelease了, 如果你想把它当一个全局对象使用,那必须自己再retain, 释放时再release。

  为什么需要Auto release ?

这个auto release有什么好,象C/C++那样,自己申请,自己释放,完全可控不好么, 这个auto relase 完全不可控,你都不知到它什么时候会被真正的release。我的理解它有一个作用就是可以做到每个函数对自己申请的对象负责,自己申请,自己释放,该函数的调用者不需要关心它内部申请对象的管理。
回复 使用道具 举报
手动-1和自动-1
回复 使用道具 举报
谢谢你们的回答
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马