Objective-c内存管理学习总结


1      内存管理思考方式

1、  自己生成的对象,自己持有,以alloc、new、copy、mutablecopy开头的方法;

2、  非自己生成的对象,自己也能持有,通过retain方法;

3、  不再需要自己持有的对象时,将其释放,用release方法;

4、  非自己持有的对象,无法释放;

 

2      Autorelease方法

Autoreleasepool的作用是:避免频繁申请/释放内存。

调用autorelease方法,可使取得的对象存在,但自己不持有。在对象超出指定生存范围时能够自动并正确地释放——通过将对象注册到autoreleasepool中实现,在最近的pool结束时,自动调用release方法释放对象。

特别说明:在函数返回值时,调用autorelease方法后,返回值对象的释放机制——在每一次事件触发时(即一个运行循环runloop),系统会自动生成一个autoreleasepool,在事件响应结束时,通过释放此pool,来释放那些所调用的函数产生的对象。

         网友解释:在Iphone项目中,大家会看到一个默认的Autorelease pool,程序开始时创建,程序退出时销毁,按照对Autorelease的理解,岂不是所有autorelease pool里的对象在程序退出时才release,这样跟内存泄露有什么区别?

答案是,对于每一个Runloop, 系统会隐式创建一个Autoreleasepool,这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object会被release。

那什么是一个Runloop呢? 一个UI事件,Timer call, delegatecall,都会是一个新的Runloop。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江中散人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值