1

如果我放了一个 try catch 并 finally 在一个异步 GCD 调用中,finally 似乎通常不会被执行,而且我也不确定 catch,似乎有时会执行。

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");
    }
});

有人知道为什么吗?

因此,我将 finally 调用置于外部,dispatch_async但我更愿意知道我的尝试已完全执行。

4

1 回答 1

2

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

此外,您的代码示例对我来说也很好。@finally块总是被执行,@catch如果抛出异常,块也是如此。

于 2012-10-29T17:01:45.073 回答