美文网首页将来跳槽用
autoreleasePool 在何时被释放?

autoreleasePool 在何时被释放?

作者: 原来是泽镜啊 | 来源:发表于2019-08-14 13:49 被阅读0次
autoreleasePool 在何时被释放?
  • App启动后,苹果在主线程 RunLoop 里注册了两个 Observer,其回调都是 _wrapRunLoopWithAutoreleasePoolHandler()。

  • 第一个 Observer 监视的事件是 Entry(即将进入Loop),其回调内会调用 _objc_autoreleasePoolPush() 创建自动释放池。其 order 是 -2147483647,优先级最高,保证创建释放池发生在其他所有回调之前。

  • 第二个 Observer 监视了两个事件: BeforeWaiting(准备进入休眠) 时调用_objc_autoreleasePoolPop() 和 _objc_autoreleasePoolPush() 释放旧的池并创建新池;Exit(即将退出Loop) 时调用 _objc_autoreleasePoolPop() 来释放自动释放池。这个 Observer 的 order 是 2147483647,优先级最低,保证其释放池子发生在其他所有回调之后。

  • 在主线程执行的代码,通常是写在诸如事件回调、Timer回调内的。这些回调会被 RunLoop 创建好的 AutoreleasePool 环绕着,所以不会出现内存泄漏,开发者也不必显示创建 Pool 了。

BAT面试题合集地址:https://www.jianshu.com/p/75e4b9fdcf41

相关文章

网友评论

    本文标题:autoreleasePool 在何时被释放?

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