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