當您在ObjC @catch
塊中捕獲到異常時,該異常對象的生命週期是什麼?我知道我可以在塊內安全地使用它,但是如果我想在塊之後再次使用它,像這樣?@catch塊中捕獲的對象的生命週期是什麼?
NSException * exception = nil;
@try {
// do something risky
} @catch(NSException * e) {
exception = e;
}
if (exception) {
NSLog(@"Caught exception: %@", exception);
}
我可以放心地藏匿參考到另一個地方?爲了安全起見,我應該做些什麼?我可以保留它並無限期地保持它嗎?
(如果我將其分配給本地,或者稍後保留並使用,但文檔沒有真正討論此對象「來自」所有權或它是否特殊,那麼似乎工作正常我正在尋找更多的清晰度。)
從書的建議好像沒用。這只是描述了正常的內存管理策略。它描述的問題是,如果你釋放沒有保留,或保留沒有釋放(或自動釋放)。如果你們兩個都這樣做,我想這應該不是問題。 – morningstar
唯一的相關行這裏似乎是「NSException的所有實例都放置在主自動釋放池。」我希望有一個指向Apple文檔的指針說明了這一點,並且明確指出這與堆棧的關係如何從異常中解脫出來。 (例如,是它奇蹟般地放在頂部自動釋放池在它抓住了?或者它的拋出點,假設該池沒有得到清理) –
我敢肯定,這意味着當前autoreleasepool – hooleyhoop