objective-c中的返回错误
我刚接触objective-c,我开始想知道处理和捕捉错误的常用/标准/正确方法是什么objective-c中的返回错误,objective-c,cocoa,cocoa-touch,nserror,Objective C,Cocoa,Cocoa Touch,Nserror,我刚接触objective-c,我开始想知道处理和捕捉错误的常用/标准/正确方法是什么 似乎可以使用NSError来实现这一点,这是一个好主意还是劫持了cocoa?我很确定NSError类就是这么做的-提供有关错误的详细信息。您将看到的最常见模式是一个方法,该方法使用指向NSError对象的指针,如中所示: - (id)doSomethingWithArgument:(id)arg error:(NSError **)error 该方法为执行某项操作的结果返回一些值(或者可能是nil),但如果调
似乎可以使用NSError来实现这一点,这是一个好主意还是劫持了cocoa?我很确定NSError类就是这么做的-提供有关错误的详细信息。您将看到的最常见模式是一个方法,该方法使用指向NSError对象的指针,如中所示:
- (id)doSomethingWithArgument:(id)arg error:(NSError **)error
该方法为执行某项操作的结果返回一些值(或者可能是nil
),但如果调用失败,将在传递的指针处放置一个NSError对象,其中包含有关失败的详细信息。您的文档负责指定在方法遇到错误时返回的内容
想到的另一种方法是@throw
-@catch
块;然而,在Objective-C@throw
中,调用异常在计算上可能相当昂贵,通常只建议在真正异常的情况下这样做
编辑:哇,原来很多人对@throw
抛出异常有很强的看法。总结一下关于这个问题的评论(非常有用):
- 抛出异常通常应该处理程序员错误(应该永远不会发生的情况,等等);异常不应用于普通错误处理。相反,请使用上面演示的
方法或NSNotification的post实例error
- 如果您最终大量使用了
/@throw
块,请非常小心它们周围的逻辑。Objective-C提供了很多方法来分离在其他线程中运行的方法,或者延迟执行等。在编写代码时,请非常小心地考虑所有这些可能性@catch
- 如果确实使用传递给方法的
对象,则返回值应指示该对象。不要尝试同时执行这两项操作(返回部分有效的对象并设置错误
对象)错误
error
参数。