繁体   English   中英

如何在 iOS Objective-C 中捕获 C++ 异常代码?

[英]How to catch C++ exception code in iOS Objective-C?

我是 iOS 编程的新手,现在我遇到了一个与捕获 C++ 类抛出的异常代码相关的问题。

    @try {
        myCPPClass myObj ; //this throws integer exception codes
    }
    @catch (...) { //I want to catch the integer value here, how ??
        NSLog(@"Exception:") ;
    }
    @finally {
    } 

我知道以异常捕获风格编码 Objective-C 可能不是一个好习惯,我想知道如何在 Objective-C 中为 C++ 类创建自定义异常类?

将您的 Objective-c .m源文件重命名为具有.mm扩展名。 然后它们将被编译为与 Objective-c 完全兼容的 Objective-C++,同时提供 C++ 的所有功能。

然后你可以用通常的方法捕获 c++ 异常

try {
   ...
}
catch(std::exception& e) {
   ...
}

构造。

对于那些仍然没有从 C++ 中捕获任何异常的人来说,Richard 的答案的扩展。

使用它而不是try catch

@try { } 
@catch (...) {
  NSLog(@"Exception:");
}

为什么?

采用动态类型异常对象 (@catch(id exception)) 的 Objective-C catch 子句可以捕获任何 Objective-C 异常,但不能捕获任何 C++ 异常。 因此,为了互操作性,使用@catch(...) 来捕获每个异常并使用@throw; 重新抛出捕获的异常。 在 32 位中,@catch(...) 与 @catch(id exception) 具有相同的效果。

- C++ 互操作性

仍然没有发现任何异常?

  • 不要指定-no_compact_unwind标志。
  • 如果您包含纯 C 代码,请指定 -funwind-tables 标志。

- 解决语言异常崩溃

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM