1

我读过很多关于 Objective-C 异常的文章,但我不知道它们有什么用处。当错误可恢复时(由于许多与泄漏相关的问题),不鼓励使用它们。内容为:在您使用 exit(0) (或类似构造)的任何地方使用它们。这也读作:只要你不希望它们被@catch-ed 使用它们。

我是否遗漏了什么,或者它们只是一个需要完全避免的功能?

4

1 回答 1

3

这是来自 Apple 的The Objective-C Programming Language电子书:

“重要提示:在许多环境中,异常的使用是相当普遍的。例如,您可能会抛出异常来表示例程无法正常执行 - 例如文件丢失或数据无法正确解析时。异常是资源-Objective-C 中的密集型。您不应该将异常用于一般的流程控制,或者仅仅表示错误。相反,您应该使用方法或函数的返回值来指示发生了错误,并提供有关问题的信息在错误对象中。有关更多信息,请参阅错误处理编程指南。” (Apple The Objective-C Programming Language,第 10 章,异常处理)

据我了解,来自某些其他语言(Java?)的程序员习惯于使用异常/尝试/捕获处理程序乱扔代码作为流控制的手段。这在 Objective-C 中被认为是非常糟糕的做法,因为您的代码会严重影响性能。Apple 建议应从发货代码中删除任何异常处理代码。任何会引起异常的情况都将是导致崩溃情况的程序员错误,而不是用户错误。提供 NSError 对象用于运行时错误处理。

因此,异常的唯一用途似乎是作为调试辅助。但是我从来自某些其他环境的编码人员那里看到了太多糟糕的建议——所以我认为是的,最好完全避免。

另请参阅 Apple关于错误和异常的说明以及:

Cocoa 框架通常不是异常安全的。一般模式是异常只为程序员错误保留,捕获此类异常的程序应在之后立即退出。

于 2013-01-31T15:43:10.300 回答