我想知道在方法内部的ARC代码上使用@autoreleasepool是否有任何好处。
我是这个意思假设我有一个占用大量内存的方法,该方法被依次调用了几次。就像是
// this is my code
for (id oneObject in objects {
[self letsUseMemory];
}
接着
- (void) letsUseMemory {
// heavy use of memory here
}
而我这样做
- (void) letsUseMemory {
@autoreleasepool {
// heavy use of memory here
}
}
有什么好处吗?我的意思是,方法完成后无论如何都将释放方法变量,因此从理论上讲,在其中添加一个autoreleasepool会有什么好处,对吗?
还是该方法中的autoreleasepool会加速重新分配?
谢谢。
最佳答案
有什么好处吗?我的意思是,方法完成后无论如何都将释放方法变量,因此从理论上讲,在其中添加一个autoreleasepool会有什么好处,对吗?
这取决于。直到池耗尽,所有自动释放的临时对象都不会被释放,无论您是否使用ARC。即:
NSString* foo = [NSString stringWithFormat:@"Bar: %@", baz];
没有封闭的@autoreleasepool,该对象实例可能会一直徘徊,直到您返回运行循环。如果该代码行存在于循环中,则可能会积累大量这些临时对象。
一般的经验法则是,如果您有一个可能创建自动释放对象的潜在大循环,请使用@autoreleasepool将循环的内部包裹起来。
将单个方法包装在@autoreleasepool中的情况较少见,也许没有意义,因为如果在循环中多次调用该方法,通常只会产生有意义的效果。将@autorelease池放入循环中可以使意图更加清晰。
关于iphone - ARC方法中的autoreleasepool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13589825/