AutoreleasePool

一、AutoreleasePool是什么

AutoreleasePool(自动释放池)是OC中的一种内存自动回收机制,它可以延迟加入AutoreleasePool中的变量release的时机。在正常情况下,创建的变量会在超出其作用域的时候release,但是如果将变量加入AutoreleasePool,那么release将延迟执行。

二、使用场景

ARC时代,在没有手加Autorelease Pool的情况下,Autorelease对象是在当前的runloop迭代结束时释放的,而它能够释放的原因是系统在每个runloop迭代中都加入了自动释放池Push和Pop。

  • 1、降低内存使用峰值:
    这一点不用多说,当你使用类似for循环这样的逻辑需要产生大量的中间变量时,Autorelease Pool无意是最佳的一种解决方案;

  • 2、如果是对NSArray操作,如果可以的话推荐使用OC提供的以下api:

 - (void)enumerateObjectsUsingBlock:
 - (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:
 - (void)enumerateObjectsAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts usingBlock:
  • 3、 如果你正在编写不基于UI 框架的程序,比如命令行工具。

  • 4、 你生成了一个辅助线程。 一旦线程开始执行你必须自己创建自动释放池。否则,应用将泄漏对象。

三、实现原理

每个Cocoa的线程都会默认标配一个Autorelease Pool,但是你也可以手动创建多个。从前面的操作中,也应该能隐约猜出来了些许,有push和pop操作,意味着每个pool的管理其实是一种类似栈结构的进栈出栈操作,当然pool的管理更复杂些,因为它可以创建多个,还可以嵌套创建删除
具体实现:实现原理(参考1)
实现原理(参考2)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容