10

我对 Objective-c 很陌生,并且开始想知道处理和捕获错误的常见/标准/正确方法是什么?

似乎可以使用 NSError 来做到这一点,这是一个好主意还是劫持可可?

4

1 回答 1

17

我很确定这就是 NSError 类要做的事情 - 提供有关错误的详细信息。您将看到的最常见的模式是一个方法,它接受一个指向 NSError 对象的指针,如下所示:

- (id)doSomethingWithArgument:(id)arg error:(NSError **)error

该方法返回一些值(或可能nil)作为执行某些操作的结果,但如果调用失败,将在传递的指针处放置一个 NSError 对象,其中包含有关失败的详细信息。如果方法确实遇到错误,您的文档负责指定返回的内容。

想到的另一种方法是@throw-@catch块;然而,在 Objective-C 中@throw,异常在计算上可能相当昂贵,通常只建议在真正异常的情况下这样做。

编辑:哇,结果很多人@throw对异常有非常强烈的看法。总结一下关于这个问题的(非常有帮助的)评论:

  • 抛出异常通常应该处理程序员错误(不应该发生的情况等);异常应用于普通的错误处理。相反,使用error上面演示的方法或发布 NSNotification 的实例。
  • 如果您最终大量使用@throw/@catch块,请非常小心围绕它们的逻辑。Objective-C 提供了许多方法来分离方法以在其他线程中运行,或延迟执行等。在编写代码时要非常小心地考虑所有这些可能性。

最后,另一个非常有效的观点:

  • 如果您确实使用error传递给方法的对象,则返回值应指示它。不要尝试两者都做(返回部分有效的对象设置error对象)。
于 2009-10-01T11:27:59.360 回答