美文网首页
AutoreleasePool

AutoreleasePool

作者: NapoleonY | 来源:发表于2018-11-21 21:42 被阅读9次

概述

App 启动后,系统在主线程 RunLoop 中注册了两个 Observer:

  1. 第一个 Observer 监视的事件是 Entry(即将进入 Loop),其回调内调用 _objc_autoreleasePoolPush()创建自动释放池,优先级最高,保证创建自动释放池发生在其他所有回调之前
  2. 第二个 Observer 监视了两个事件:
    • BeforeWaiting(RunLoop 准备进入休眠)调用_objc_autoreleasePoolPop()_objc_autoreleasePoolPush(),用来释放旧的池,然后创建新的池。
    • Exit(即将退出 RunLoop)调用_objc_autoreleasePoolPop(),释放自动释放池。这个 Observer 的优先级最低,保证其释放池子的动作发生在其他所有回调之后

在线程中执行的代码,通常是写在各种事件回调或者 Timer 回调内的,这些回调会被 RunLoop 创建好的 AutoreleasePool 环绕着,所以不会发生内存泄漏。开发者也不必显式创建自动释放池了。

未完待续

参考

  1. 深入理解RunLoop
  2. 黑幕背后的Autorelease

相关文章

网友评论

      本文标题:AutoreleasePool

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