我无法理解错误处理的地方或应该使用异常处理的地方。我假设这一点,如果它是一个现有的框架类,则有委托方法,这将有助于程序员发送错误对象引用并在此之后处理错误。异常处理是针对程序员使用某些框架类的操作引发错误并且无法修复错误对象引用的情况。
这个假设有效吗?或者我该如何理解它们?
答案 0 :(得分:3)
如果程序员已经检查了抛出异常的方法的参数,那么您应该使用永远不会出现的错误的异常。例如。除以0或从NSArrays获得的众所周知的“越界” - 例外。
NSErrors是针对程序员无能为力的错误。例如。解析plist文件。如果程序在尝试读取其内容之前检查文件是否是有效的plist,那将浪费资源。对于有效性检查,程序必须解析整个文件。并解析文件以报告它是有效的,这样你可以再次解析它将是一个完全浪费。因此,如果无法解析文件,该方法将返回NSError(或者只是nil,它会告诉您出错)。
解析有效性是“程序员应该检查参数”部分。它不适用于此类错误,因此您不会抛出异常。
理论上,您可以使用return nil
替换越界异常。但这会导致编程非常糟糕。
Apple说:
重要:在许多环境中,使用例外情况相当普遍。例如,您可能会抛出异常来表示例程无法正常执行 - 例如,当文件丢失或数据无法正确解析时。 Objective-C中的例外是资源密集型的。您不应将异常用于一般流量控制,或仅用于表示错误。相反,您应该使用方法或函数的返回值来指示发生了错误,并在错误对象中提供有关该问题的信息。
答案 1 :(得分:0)
我认为你对错误的假设是绝对正确的,因为它提供了一组方法(UIWebView错误处理),但你对异常的假设部分正确,因为异常只发生在我们做错了什么不允许的情况下通过框架,可以修复。 (例如,访问超出其限制的数组中的成员)。 并将导致应用程序崩溃。