如题,ARC下已经不能使用NSAutoreleasePool对象,release/retain等方法,但是查了SDWebImage源码,看到 @autoreleasepool {}在ARC下还能用,请问,在ARC下 @autoreleasepool {}的作用是什么,如果跟NSAutoreleasePool是一样的,那么ARC不是会在代码执行完毕的时候自动回收的么,为什么还要多此一举呢?
如题,ARC下已经不能使用NSAutoreleasePool对象,release/retain等方法,但是查了SDWebImage源码,看到 @autoreleasepool {}在ARC下还能用,请问,在ARC下 @autoreleasepool {}的作用是什么,如果跟NSAutoreleasePool是一样的,那么ARC不是会在代码执行完毕的时候自动回收的么,为什么还要多此一举呢?
你写到了release/retain等方法, ARC 下你不能写这些方法,但ARC 会帮你在合适的地方插入这些方法。这将导致内存的延迟释放。autoreleasepool是为了 autorelease 这个方法,在对象的创建者没法销毁对象的时候,可以使用autorelease让autoreleasepool每隔一段时间检查该对象的引用计数,如果为0则释放对象。那么多个autoreleasepool的作用就是增加这种间隔,比原本autorelease释放的时间更早释放。
4 回答4.2k 阅读
2 回答1.8k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读
1 回答1.2k 阅读
1 回答1.1k 阅读
1 回答898 阅读
ARC下用 @autoreleasepool {}主要还是为了避免内存峰值。简单点的说在{}中存放的对象会在稍后的某个时刻释放掉。