我们正在为 iPhone 开发者编写一个 API,但我们不知道最佳的异常处理实践是什么。我们研究了
大多数 API 使用的惯例是什么?哪种方法对 "Objective-C" 最友好?
NSError
、标准的 POSIX 方法以及 NSException
。大多数 API 使用的惯例是什么?哪种方法对 "Objective-C" 最友好?
NSError
、标准的 POSIX 方法以及 NSException
。根据异常编程主题介绍:
重要提示:仅应将异常保留用于编程或意外的运行时错误,例如越界访问集合,尝试更改不可变对象,发送无效消息以及失去与窗口服务器的连接。创建应用程序时通常使用异常处理这些类型的错误,而不是在运行时进行处理。
...
在Cocoa应用程序中,代替异常,建议使用错误对象(NSError)和Cocoa错误传递机制来传达预期的错误。有关更多信息,请参见Cocoa错误处理编程指南。
所以我理解的是,只有在出现严重的问题时才使用异常。否则,请使用NSError
对象。
+1 for NSError
.
我记不清在苹果文档的哪个部分看到过这个,但我还记得他们鼓励编码哲学是“先尝试,然后检查错误”,而不是“检查有效性,然后执行操作”。例如,与其在使用网络之前检查网络是否可用,不如尝试使用并在收到错误时做出回应。
我同意这种哲学在许多用例中很有用,因为 (a) 它将有效性检查移动到操作时刻,从某种意义上说更准确,(b,主观的) 它以这种模式工作更加有趣。
总之,建议是使用NSError
,并提供接受null
的NSError **
参数以立即反馈,这样可以使API用户更友好!这种模式也在Cocoa/Touch的几个地方得到了确定;例如,NSString
方法writeToFile:atomically:encoding:error:。