2012-10-29 77 views
1

如果我放了一個try catch,最後在一個異步GCD調用中,finally看起來並沒有被執行,我也不確定這個catch是什麼,似乎執行了一些時間。GCD @try @catch @finally

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 
    @try { 
     [self methodThatAlwaysThrowsAnException]; 
    }@catch (NSException *exc) { 
     NSLog(@"Caught the Exception %@",exc); 
    }@finally{ 
     NSLog(@"Should always execute"); 
    } 
}); 

有誰知道這是爲什麼?

因此,我把dispatch_async以外的終於打電話,但我寧願知道我的嘗試完全執行。

+0

像Cocoa這樣的東西,具有NSError參數的方法可以使用返回的結果進行檢查更爲常見。 – Abizern

回答

2

儘量避免@try/@catch控制流程操作。

此外,您的代碼示例適合我。如果發生異常,@finally塊總是被執行,@catch塊也會被執行。