iPhone C ++ / Objective-C异常

时间:2012-04-17 03:14:42

标签: c++ objective-c exception-handling

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

C ++和Objective C异常是相同的还是C ++异常只能被C ++代码捕获而反之亦然?

感谢

1 个答案:

答案 0 :(得分:2)

  

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

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

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

与OS X不同,iPhone的C ++和ObjC异常是而不是使用“零成本例外”实现的。由于unwind表的大小,并且由于编译器的支持,因此没有使用零成本异常,这有利于执行速度超过大小。

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

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

  

C ++和Objective C异常是相同的还是C ++异常只能被C ++代码捕获而反之亦然?

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