知识库

476 阅读1分钟

iOS底层

AutoreleasePool

App启动后,苹果在主线程RunLoop里注册了两个Observer,其回调都是_runLoopObserverCallout()(旧的是_wrapRunLoopWithAutoreleasePoolHandler())。

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

Runloop

facehook

facehook

二进制重排 二进制重排 今日头条 iOS 安装包大小优化 链接2

抖音优化