为什么使用NSError indrect参数而不是@ try / @ catch / @ finally

时间:2018-02-01 03:01:44

标签: objective-c try-catch nserror nsexception

从其他问题,我可以看到建议将NSError用于可恢复的错误,@throw / @catch / @finallyNSException应该用于致命错误。

这对我没有意义。为什么要使用NSException来表示致命错误? 重点是它们可以被捕获!如果抓住它们不是重点,为什么要使用@try / @catch系统呢?为什么不只是NSLogexit(1),并称之为一天?

NSError也非常笨重,这让我更喜欢@throw / @catch / @ finally

激励 使用哪一个

2 个答案:

答案 0 :(得分:2)

这些是长期存在的Cocoa设计模式。

  • 从您的值请求(例如“请尝试从此字符串创建URL”)中按顺序(通常是间接)返回NSError对象。当无法提供值时,它会被有效替换,并且实际上是一个复杂的消息,可能包含可以向用户显示的文本的信息包,有关用户如何从情境中恢复的建议等等。

  • 发生NSException是因为程序员犯了一个严重的错误。它代表了一个致命的问题,因此它渗透了链条并使程序突然结束。 it 包含的消息仅适用于程序员

答案 1 :(得分:-1)

苹果说:

  

重要:您应该保留使用异常进行编程或意外的运行时错误,例如越界收集访问,尝试改变不可变对象,发送无效消息以及丢失连接到窗口服务器。在创建应用程序时而不是在运行时,通常会使用异常处理这些类型的错误。

  

而不是异常,错误对象(NSError)和Cocoa错误传递机制是在Cocoa应用程序中传达预期错误的推荐方法。

来源:Exception Programming Topics