ObjC ++不通过引用捕获异常吗?

时间:2012-10-08 09:00:58

标签: ios ios6

我在ObjC ++包装器类(.mm)中使用以下代码,我注意到如果我通过引用捕获代码,则随机使用EXC_BAD_ACCESS失败。另一方面,如果我捕获对象(“std :: runtime_error错误”),它似乎没问题。

我是ObjC的新手,我知道ObjC中没有使用引用,但我希望编译器能够在这种情况下正常工作。我错过了什么吗?

catch(std::runtime_error &error) {
    dispatch_async(dispatch_get_main_queue(), ^{
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:[NSString stringWithCString:error.what() encoding:[NSString defaultCStringEncoding]]
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];
    });

1 个答案:

答案 0 :(得分:0)

ObjC ++必须理解C ++引用。

问题是你的程序是异步读取另一个线程的内存。据我所知,该线程已经退出并且它的堆栈内存与它一起,或者当线程继续执行时堆栈内存被覆盖 - 因此,EXC_BAD_ACCESS(作为一个可能解释)。