我读过许多关于Objective-C异常的文章,我无法弄清楚它们对什么有用。 当错误可以恢复时(由于许多与泄漏相关的问题),不鼓励使用它们。其内容如下:在使用exit(0)(或类似构造)的任何地方使用它们。这也是:只要你不希望它们被@ catch-ed使用它们。
我错过了什么,或者他们只是一个完全避免的功能?
答案 0 :(得分:3)
这是来自Apple的 Objective-C编程语言电子书:
“重要:在许多环境中,使用异常是公平的 平凡。例如,您可能会抛出异常来发出信号 例程无法正常执行 - 例如当文件丢失或时 数据无法正确解析。例外是资源密集型的 在Objective-C中。你不应该使用例外的一般流程 - 控制,或只是表示错误。相反,你应该使用 返回表示错误的方法或函数的值 发生了,并提供有关错误中的问题的信息 宾语。有关详细信息,请参阅Error Handling Programming Guide。“(Apple Objective-C编程语言,第10章,例外情况 处理)
据我了解,来自某些其他语言(Java?)的程序员习惯于使用异常/ try / catch处理程序将其代码乱丢,作为流控制的一种手段。这在Objective-C中被认为是非常糟糕的练习,因为您的代码会受到严重的性能影响。 Apple建议应从运输代码中删除任何异常处理代码。任何会导致异常的情况都是程序员错误导致崩溃情况,而不是用户错误。 NSError对象是为运行时错误处理而提供的。
因此,异常的唯一用途似乎是作为调试辅助工具。但是我从其他某些环境中找到了太多不好的建议 - 所以我认为是的,最好完全避免。
另请参阅Apple的note on errors and exceptions和this:
Cocoa框架通常不是例外安全的。一般模式是异常仅保留给程序员错误,并且捕获此类异常的程序应该很快就会退出。