从其他问题,我可以看到建议将NSError
用于可恢复的错误,@throw
/ @catch
/ @finally
和NSException
应该用于致命错误。
这对我没有意义。为什么要使用NSException
来表示致命错误? 重点是它们可以被捕获!如果抓住它们不是重点,为什么要使用@try
/ @catch
系统呢?为什么不只是NSLog
,exit(1)
,并称之为一天?
NSError
也非常笨重,这让我更喜欢@throw
/ @catch
/ @ finally
激励 使用哪一个
答案 0 :(得分:2)
这些是长期存在的Cocoa设计模式。
从您的值请求(例如“请尝试从此字符串创建URL”)中按顺序(通常是间接)返回NSError对象。当无法提供值时,它会被有效替换,并且实际上是一个复杂的消息,可能包含可以向用户显示的文本的信息包,有关用户如何从情境中恢复的建议等等。
发生NSException是因为程序员犯了一个严重的错误。它代表了一个致命的问题,因此它渗透了链条并使程序突然结束。 it 包含的消息仅适用于程序员。
答案 1 :(得分:-1)
重要:您应该保留使用异常进行编程或意外的运行时错误,例如越界收集访问,尝试改变不可变对象,发送无效消息以及丢失连接到窗口服务器。在创建应用程序时而不是在运行时,通常会使用异常处理这些类型的错误。
而不是异常,错误对象(NSError)和Cocoa错误传递机制是在Cocoa应用程序中传达预期错误的推荐方法。