1

try catch を配置し、最後に非同期 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");
    }
});

これがなぜなのか誰か知っていますか?

したがって、最終呼び出しを外部に配置しましたdispatch_asyncが、試行が完全に実行されたことを知りたいと思います。

4

1 に答える 1

2

@try/@catch制御フロー操作は避けてください。

また、あなたのコードサンプルは私にとってはうまく機能します。例外がスローされた場合のブロックと@finally同様に、ブロックは常に実行されます。@catch

于 2012-10-29T17:01:45.073 に答える