2012-01-03 49 views
1

假设我有这样的代码:@autorelease和循环

@autoreleasepool { 
    for(int i = 0; i < relatedSlideDecks.count; i++) { 
    MyClass *myObject = [MyClass new]; 
    ... something happens here 
    [myObject release]; 
    { 
} 

我仍然需要[myObject release];?还是会因为@autoreleasepool而自动发布?

回答

2

它仍然是释放myObject因为@autoreleasepool块不改变memory management rules,其中规定,你必须放弃你自己的对象的所有权的要求,而你拥有myObject。你不能做的一件事就是使用一个在该块之外的@autoreleasepool块内自动释放的对象。如果你有一小部分程序可能会创建大量自动释放对象,而这些对象需要尽快释放,而不是直到主要的自动释放池被耗尽。

3

如果您使用ARC,则根本不需要。

否则,您需要调用该释放方法。

确保@autoreleasepool块的唯一一件事是,一旦你的代码执行过它,任何具有autorelease调用的对象都会得到它的释放调用。

3

是的,你仍然需要[myObject release]@autoreleasepool的存在不会导致对象神奇地获得自动释放。这只会导致 autoreleased的对象在自动释放池耗尽时被清除。您可以在Advanced Memory Management Programming Guide阅读更多内容。