2012-02-09 11 views
16

は、この例を考えてみましょう:私たちは早期に返された場合早戻し/退室時に@autoreleasepool {}が流出しますか?

- (void)doSomething { 
    @autoreleasepool { 
     if (someCondition) { 

     /* ... allocate some autoreleased objects here ... */ 

     return; 
     } 
    } 
} 

は以前、手動NSAutoreleasePoolsで、私たちは、そうでない場合は、プールが排出されないと、[pool drain]を呼び出すために必要な。新しい@autoreleasepool {}

+0

http://stackoverflow.com/questions/5083216/return-statement-inside-nsautoreleasepool-scope –

+1

私は私がそれゆえ、interwebsに十分に迅速に答えを見つけることができませんでした同時に尋ねると答えている... –

答えて

14

で 答えがYESである:

ブロックがフォールスルーまたは指向制御フロー(例えばリターンとして、または破壊)することにより、自動解放プールが保存さに復元されているかどうか、正常に終了した場合状態で、その中のすべてのオブジェクトを解放します。例外を指定してブロックを終了すると、プールは排水されません。

出典: http://clang.llvm.org/docs/AutomaticReferenceCounting.html#autoreleasepool

関連する問題