iOS 中内存管理(Autoreleasepool)
Autoreleasepool
Autoreleasepool
用于存放那些需要在稍后某个时刻释放的对象,清空自动释放池时,系统会向其中的对象发送release
消息
复制代码
注:这里只是发送一次release
消息,如果当时引用计数不为 0,则该对象依然不会释放
Autoreleasepool
方法会返回对象本身(MRC)
复制代码
调用完
Autoreleasepool
方法后,对象的计数器不变(MRC)
复制代码
Autoreleasepool 的原理
Autoreleasepool
实际上只是release
的调用延迟了,对于每一个Autoreleasepool
,系统只是把该 Object 放入了当前的Autoreleasepool
中,当 pool 被释放时,该 pool 中的所有 Object 会被调用release
Autoreleasepool 的优点
不用关心对象释放时间
不用关心什么时候调用
release
复制代码
Autoreleasepool 的注意事项
一定要在自动释放池中调用
Autoreleasepool
,才会将对象放入自动释放池(MRC)在自动释放池创建了对象,一定要调用
Autoreleasepool
,才会将对象放入自动释放池中(MRC)
复制代码
不要在自动释放池中使用比较消耗内存的对象
复制代码
尽量不要再自动释放池中使用循环,特别的循环次数多的
复制代码
一个程序中可以创建 N 个自动释放池,并且自动释放池可以嵌套,如果存在多个自动释放池,那么自动释放池会以“栈”的形式存储,先进后出
复制代码
合理利用 Autoreleasepool 可以降低内存峰值(ARC)
把循环内的代码包裹在Autoreleasepool
中,那么在循环中自动释放对象就会放在这个池中,这样内存峰值就会降低(内存峰值:app 在某个特定的时段内最大内存用量)
复制代码
版权声明: 本文为 InfoQ 作者【NewBoy】的原创文章。
原文链接:【http://xie.infoq.cn/article/99ddd17e34178ab0038d573bb】。文章转载请联系作者。
评论