@autoreleasepool循环或循环@autoreleasepool?

fan*_*ard 22 iphone objective-c

在循环操作中将大量自动释放的对象放入autoreleasepool中是一种很好的做法.我发现有人把@autoreleasepool放在循环中,但其他人把循环放在@autoreleasepool中.

1:

while ([rs next]) {
    @autoreleasepool {
        NSDictionary *dict = [self dictFromXX];
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

2:

@autoreleasepool {
    while ([rs next]) {
        NSDictionary *dict = [self dictFromXX];
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个更好?或者代码1和2之间有什么区别?

谢谢!

Pau*_*l.s 30

在每次迭代的第一个示例中,池都已耗尽.如果迭代的主体涉及许多自动释放的对象,这是有意义的.

第二个例子只会在循环后一次排空池.

因此,如果循环的内部导致内存膨胀,那么请选择第一个选项.如果整个循环中的内存膨胀是可接受的,则循环然后使用选项2.