美文网首页
自动释放池什么时候释放?

自动释放池什么时候释放?

作者: 凌云01 | 来源:发表于2020-07-08 20:55 被阅读0次

    自动释放池寄生于Runloop:程序启动后,苹果在主线程 RunLoop 里注册了两个 Observer,其回调都是 _wrapRunLoopWithAutoreleasePoolHandler(),一是,监测Entry(即将进入Loop)状态,其回调内会调用 _objc_autoreleasePoolPush() 创建自动释放池,其 order 是-2147483647,优先级最高,保证创建释放池发生在其他所有回调之前;另外一个,Observer 监视了两个事件: BeforeWaiting(准备进入休眠) 时调用_objc_autoreleasePoolPop() 和 _objc_autoreleasePoolPush() 释放旧的池并创建新池;Exit(即将退出Loop) 时调用 _objc_autoreleasePoolPop() 来释放自动释放池。这个 Observer 的 order 是 2147483647,优先级最低,保证其释放池子发生在其他所有回调之后。

    • 第一次创建:启动runloop时
    • 最后一次销毁:runloop退出时
    • 其他时候的创建和销毁:当runloop即将进行休眠状态时会销毁旧的释放池,并创建一个新的释放池。

    相关文章

      网友评论

          本文标题:自动释放池什么时候释放?

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