美文网首页
RunLoop 与 Autorelease Pool的关系

RunLoop 与 Autorelease Pool的关系

作者: 皮蛋豆腐酱油 | 来源:发表于2019-08-12 17:14 被阅读0次

    RunLoop与 Autorelease Pool 有关系么?
    有。
    我们总是看到有文章说程序启动后,苹果在主线程 RunLoop 里注册了两个 Observer:
    第一个 Observer 监视的事件是 Entry(即将进入Loop),其回调内会调用 _objc_autoreleasePoolPush() 创建自动释放池。其 order 是-2147483647,优先级最高,保证创建释放池发生在其他所有回调之前。
    第二个 Observer 监视了两个事件: BeforeWaiting(准备进入睡眠) 和 Exit(即将退出Loop),
    BeforeWaiting(准备进入睡眠)时调用_objc_autoreleasePoolPop() 和 _objc_autoreleasePoolPush() 释放旧的池并创建新池;
    Exit(即将退出Loop) 时调用 _objc_autoreleasePoolPop() 来释放自动释放池。这个 Observer 的 order 是 2147483647,优先级最低,保证其释放池子发生在其他所有回调之后。

    相关文章

      网友评论

          本文标题:RunLoop 与 Autorelease Pool的关系

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