我们正在为iphone开发人员编写API,我们不知道异常处理的最佳实践是什么。我们研究了NSError
,标准POSIX方式,NSException
大多数API使用的约定是什么?哪个是“Objective-C友好”?
答案 0 :(得分:14)
来自Introduction to Exception Programming Topics:
重要:您应该保留使用异常进行编程或意外的运行时错误,例如越界收集访问,尝试改变不可变对象,发送无效消息以及丢失连接到窗口服务器。在创建应用程序时而不是在运行时,通常会使用异常处理这些类型的错误。
...
而不是异常,错误对象(NSError)和Cocoa错误传递机制是在Cocoa应用程序中传达预期错误的推荐方法。有关详细信息,请参阅Error Handling Programming Guide For Cocoa。
据我了解,只有在出现致命错误时才使用例外。否则,请使用NSError
个对象。
答案 1 :(得分:2)
+1 NSError
。
我忘记了Apple文档中我读到的内容,但我也记得它们鼓励编写“先尝试然后检查错误”的编码理念,而不是“检查有效性,然后再进行操作”。例如,在使用网络之前,不要看网络是否可用,只要尝试使用它,如果/什么时候回来就会响应错误。
我同意许多用例的这一理念,因为(a)它将有效性检查移动到行动的那一刻,所以在某种意义上它更准确,并且(b,主观)在这个中使用代码更有趣图案。
总结一下,建议使用NSError
,并提供接受NSError**
的{{1}}参数的即时反馈,以便对您的API用户非常友好!这种模式也在Cocoa / Touch的几个地方建立;例如NULL
方法writeToFile:atomically:encoding:error:。