处理在通过NSObject的performSelectorOnMainThread:withObject:waitUntilDone调用的方法期间引发的异常:

时间:2020-03-06 14:56:57  来源:igfitidea点击:

如果通过NSObject的performSelectorOnMainThread:withObject:waitUntilDone:调用myMethod中的异常,会发生什么?

特别是,我可以像这样在调用performSelectorOnMainThread的范围内捕获它们吗?

@try {
    [self performSelectorOnMainThread:@selector(myMethod) withObject:nil waitUntilDone:YES];
} @catch(NSException *e) {
    //deal with exception raised in myMethod here??
}

我意识到,如果waitUntilDone为" NO",则此方法的语义很奇怪。

解决方案

我们将无法像这样抓住他们。 Cocoa可能会捕获异常并将其记录到控制台,但不会在名为-perform的线程中重新引发它们。相反,我们可以在-myMethod :(或者调用-myMethod:的包装器)中捕获它们,并将其存储在其他线程可以读取它们的位置。