[英]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.