iOS底层
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,优先级最低,保证其释放池子发生在其他所有回调之后。