GCD @try @catch @finally

时间:2012-10-29 16:48:04

标签: ios try-catch grand-central-dispatch

如果我把一个try catch并最终在异步GCD调用中,最终通常似乎没有执行,我也不确定捕获,似乎在某些时候执行。

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之外,但我更愿意知道我的尝试已完全执行。

1 个答案:

答案 0 :(得分:2)

尽量避免@try/@catch进行控制流操作。

此外,您的代码示例对我来说很好。始终执行@finally块,如果抛出异常,则@catch块也一样。