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