美文网首页
AutoreleasePool简单理解

AutoreleasePool简单理解

作者: 表弟1616 | 来源:发表于2018-06-27 15:22 被阅读14次

根据网上看的博客,做了一下整理,更便于理解

AutoreleasePool

一、基本概念

ARC下的产物,为了替代人工管理内存,大大的简化了iOS开发人员的内存管理工作;实质上是使用编译器替代人工在适当的位置插入release、autorelease等内存释放操作;

从 main 函数开始

main 函数可以说是在整个 iOS 开发中非常不起眼的一个函数,它很好地隐藏在 Supporting Files 文件夹中,却是整个 iOS 应用的入口。

main.m 文件中的内容是这样的:

在这个 @autoreleasepool block 中只包含了一行代码,这行代码将所有的事件、消息全部交给了 UIApplication 来处理,但是这不是本文关注的重点。

需要注意的是:整个 iOS 的应用都是包含在一个自动释放池 block 中的

简单的说

1.@autoreleasepool是自动释放池,让我们更自由的管理内存

2.当我们手动创建了一个@autoreleasepool,里面创建了很多临时变量,当@autoreleasepool结束时,里面的内存就会回收

3.ARC时代,系统自动管理自己的autoreleasepool,runloop就是iOS中的消息循环机制,当一个runloop结束时系统才会一次性清理掉被autorelease处理过的对象,其实本质上说是在本次runloop迭代结束时清理掉被本次迭代期间被放到autorelease pool中的对象的。至于何时runloop结束并没有固定的duration。 

方便是方便了,但是有些情况下,我们还是需要手动创建自动释放池,那么,什么时候呢?

如果你正在编写不基于UI 框架的程序,比如命令行工具。

如果你编写的循环创建了很多临时对象。 

你可以在循环中使用自动释放池block,在下次迭代前处理这些对象。在循环中使用自动释放池block,有助于减少应用程序的内存占用。

你生成了一个辅助线程。 

一旦线程开始执行你必须自己创建自动释放池。否则,应用将泄漏对象。

这是苹果文档中的翻译,按我的理解,最重要的使用场景,应该是有大量中间临时变量产生时,避免内存使用峰值过高,及时释放内存的场景。 

相关文章

网友评论

      本文标题:AutoreleasePool简单理解

      本文链接:https://www.haomeiwen.com/subject/vunbyftx.html