gpt4 book ai didi

iphone - ARC方法中的autoreleasepool

转载 作者:行者123 更新时间:2023-12-01 18:26:14 25 4
gpt4 key购买 nike

我想知道在方法内部的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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com