问题 在为iphone编写API时,错误处理的最佳实践是什么?


我们正在为iphone开发人员编写API,我们不知道异常处理的最佳实践是什么。我们调查了一下 NSError,标准POSIX方式, NSException

大多数API使用的约定是什么?哪个是“Objective-C友好”?


3340
2018-03-30 15:03


起源

这个问题可能是重复的 stackoverflow.com/questions/1503348/... 和 stackoverflow.com/questions/2169728/... - Brad Larson♦


答案:


来自 异常编程主题简介

重要:您应该保留使用异常进行编程或意外的运行时错误,例如越界收集访问,尝试改变不可变对象,发送无效消息以及丢失与窗口服务器的连接。在创建应用程序时而不是在运行时,通常会使用异常处理这些类型的错误。

...

而不是异常,错误对象(NSError)和Cocoa错误传递机制是在Cocoa应用程序中传达预期错误的推荐方法。有关详细信息,请参阅 错误处理Cocoa编程指南

据我所知,只有在出现致命错误时才使用异常。否则,请使用 NSError 对象。


14
2018-03-30 15:16





+1为 NSError

我忘记了Apple文档中我读到的内容,但我还记得它们鼓励编写“先尝试然后检查错误”的编码理念,而不是“检查有效性,然后再进行操作”。例如,在使用网络之前,不要看网络是否可用,只需尝试使用它,如果/什么时候回来就会响应错误。

对于许多用例,我同意这一理念,因为(a)它将有效性检查移动到行动的那一刻,因此从某种意义上说它更准确,而且(b,主观)在这种模式下使用代码更有趣。

总而言之,建议是使用 NSError,并提供即时反馈 NSError** 接受的参数 NULL,对您的API用户非常友好!这种模式也在Cocoa / Touch的几个地方建立;例如 NSString 方法 将writeToFile:原子:编码:错误:


2
2018-03-30 17:41