开发者社区> 问答> 正文

iOS @autoreleasepool {}在ARC下的使用场景

如题,ARC下已经不能使用NSAutoreleasePool对象,release/retain等方法,但是查了SDWebImage源码,看到 @autoreleasepool {}在ARC下还能用,请问,在ARC下 @autoreleasepool {}的作用是什么,如果跟NSAutoreleasePool是一样的,那么ARC不是会在代码执行完毕的时候自动回收的么,为什么还要多此一举呢?

展开
收起
a123456678 2016-07-27 11:27:04 2500 0
2 条回答
写回答
取消 提交回答
  • 在ARC下使用autoreleasepool,可以达到优化代码执行效率的问题。
    比如在一个for循环中,如果每次循环时都创建了大量的临时对象,那么通常会在整个代码块执行结束后,才会一次性释放所有的临时变量。
    如果在for循环中使用了autoreleasepool,那么每次循环结束后就会自动进行临时对象的释放,节约系统资源。

    2019-07-17 20:00:27
    赞同 展开评论 打赏
  • 你写到了release/retain等方法, ARC 下你不能写这些方法,但ARC 会帮你在合适的地方插入这些方法。这将导致内存的延迟释放。autoreleasepool是为了 autorelease 这个方法,在对象的创建者没法销毁对象的时候,可以使用autorelease让autoreleasepool每隔一段时间检查该对象的引用计数,如果为0则释放对象。那么多个autoreleasepool的作用就是增加这种间隔,比原本autorelease释放的时间更早释放。

    2019-07-17 20:00:27
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
手淘iOS性能优化探索 立即下载
From Java/Android to Swift iOS 立即下载
深入剖析iOS性能优化 立即下载