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的使用场景
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Document https://developer.apple.com/library/ios/document...
- 什么时候使用@autoreleasepool ? 写基于命令的程序时,就是没有UIKit框架,例如appkit、c...
- 一、@autoreleasePool 的使用: 1.NSAutoreleasePool是什么?实际上是个对象引用计...
- 此文是《Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法》的阅读...
- 在一个 iOS 开发群中,看到一个小伙伴的疑问(如下图),自己测试了下使用 @autoreleasepool 内...