iPhone C++/Objective-C exceptions

iPhone C++/Objective-C exceptions

本文关键字:exceptions Objective-C C++ iPhone      更新时间:2023-10-16

有谁知道在 iPhone 应用程序的 XCode 中启用C++异常处理的后果?默认情况下,它似乎处于禁用状态。

C++ 和 Objective C 异常是否相同,还是C++异常只能由C++代码捕获,反之亦然?

谢谢

有谁知道在 iPhone 应用程序的 XCode 中启用C++异常处理的后果?

这是C++异常处理的正常选择。如果您正在使用C++库,则可能需要启用此功能。

您不得假设异常将跨图像边界清晰地传播。也就是说,您不能假设它被定义为投掷基础框架并在另一侧接住。IOW,在MyApp中抛出MyLib->通过Foundation->catch可能会导致未定义的行为。因此,您必须假设您需要在MyLib中捕获这些内容。

与OS X不同,iPhone的C++和ObjC例外不是使用"零成本例外"实现的。零成本异常(有利于执行速度而不是大小)未使用,因为展开表的大小以及编译器支持。

启用例外将需要一些速度和一些大小 - 我预计iOS上的大多数程序不到10%。

最终,需求应确定是否应启用异常,并且它们将引入一些执行和大小开销。除非您使用的是非常专业的C++库,否则您应该假定需要启用它们。但是,支持该功能。

C++ 和 Objective C 异常是否相同,还是C++异常只能由C++代码捕获,反之亦然?

在 64 位 OS X 和 iOS 环境中,可以使用任一处理程序捕获C++和 ObjC 异常。在 32 位 OS X 中,它们使用不同的例外模型。因此,"catch all"表达式(用任一语言编写)可以在 iOS 和 64 位 OS X 中捕获 C++ 和 ObjC 异常,但在 32 位 OS X 中则不能。