美文网首页iOS 优化
iOS开发@autoreleasepool的使用场景

iOS开发@autoreleasepool的使用场景

作者: 心成则玲 | 来源:发表于2022-06-20 17:05 被阅读0次

autoreleasepool是一种机制,实现了放入其中的对象,可以在生命周期结束后自动进行释放。
什么时候使用@autoreleasepool?
1、写基于命令的程序时,就是没有UIKit框架,列如appkit、cocoa框架时。
2、写循环,循环里包含大量的临时变量创建时。
3、创建新的线程任务。(非cocoa程序创建时才需要)
4、长期在后台运行的任务。
runloop相关
App启动后,苹果在主线程RunLoop里注册了两个Observer,其回调都是_wrapRunLoopWithAutorelesasePoolHandle()。第一个Observer监视的事件是Entry(即将进入Loop),其回调内会调用_objc_autoreleasePoolPush()创建自动释放池。优先级最高,保证创建释放池发生在其他所有回调之前。
第二个Observer监视了两个事件:BeforeWaiting(准备进入休眠)时调用_objc_autoreleasePoolPop()和_objc_autoreleasePoolPush()释放旧的池并创建新池;Exit(即将退出Loop)时调用_objc_autoreleasePoolPop()来释放自动释放池。优先级最低,保证其释放池子发生在其他所有回调之后。在主线程执行的代码,通常是写在诸如事件回调、Timer回调内的。这些回调会被RunLoop创建好的AutoreleasePool环绕着,所以不会出现内存泄漏,开发者也不必显示创建Pool了。

相关文章

网友评论

    本文标题:iOS开发@autoreleasepool的使用场景

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