我只是想了解如果 block 内发生异常会发生什么情况?当它在单独的线程上运行时,它将被抛出到哪里。
还有人可以建议我更好地实现以下两个选项吗?
@try{
[self performBlock^{
some code
}];
}
@catch (NSException*e) {
}
或
[self performBlock^{
@try{
some code
}
@catch (NSException*e) {
}
}];
最佳答案
对于 #2,它显然捕获了代码中的异常。
对于 #1,这取决于此 performBlock:
方法的作用。 Try block 捕获发生在堆栈下方的异常,即同步函数调用。因此,如果 performBlock:
同步调用它的 block ,那里的异常将被 try block 捕获。但是如果是异步调用,那么那里的异常就不会被try block 捕获,因为执行 block 时,try block 不在栈中。
关于ios - 如果 block 内发生异常会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25376680/