【发布时间】:2010-09-28 10:00:34
【问题描述】:
Cocoa 异常政策背后的基本原理是什么 - 或者为什么只对程序员错误使用异常?
我知道异常过去是相当昂贵的,所以人们不想过度使用它们。但这随着现代运行时而改变,它是零成本的例外。我也明白使用异常来做一般控制流不是一个好主意,因为它可能导致代码相当难以理解。
但是为什么要使用异常来表示程序员的错误呢?对于这种情况,记录一条消息后跟abort() 就足够了。为什么我应该编写一个@catch(...) 块来处理程序员错误而不是修复实际错误?我一直在思考这个问题,但我没有找到任何合理使用异常来解决程序员错误的方法。
(作为旁注/问题:我已经编写了一个递归下降解析器,并且我计划在其中使用异常来处理错误。对我来说,这似乎比为每个单独添加一个 out 参数更合理在那里的函数并手动检查到处是否有错误。当然,我会捕获我在从外部调用的顶级方法中抛出的任何异常。有人认为这对异常来说是一个不好的用途吗?)
更新:真正的问题
感谢到目前为止的所有答案。他们都是真的,但他们并没有真正回答我的问题。所以我想我不是很清楚,对此感到抱歉。所以这是真正的问题:
为什么 Cocoa 会为程序员错误(或断言)抛出异常? 不应该捕获它们,实际上编写代码来处理调用堆栈中某处的程序员错误并不是反正是个好主意。在我看来,例外是浪费精力。只需记录错误并调用abort()(退出程序)就足够了。那么实际抛出异常有什么好处呢?
我理解为什么通常不使用和不鼓励异常 - Cocoa 的大部分部分都不是异常安全的。这不是这里的问题。我希望我现在说清楚了。
【问题讨论】:
标签: objective-c cocoa exception exception-handling