我们正在为iphone开发人员编写一个API,我们不知道异常处理的最佳做法。我们研究了标准POSIX方式NSError
,NSException
当为iPhone编写API时,什么是错误处理的最佳实践?
大多数API使用的约定是什么?哪一个最“Objective-C友好”?
我们正在为iphone开发人员编写一个API,我们不知道异常处理的最佳做法。我们研究了标准POSIX方式NSError
,NSException
当为iPhone编写API时,什么是错误处理的最佳实践?
大多数API使用的约定是什么?哪一个最“Objective-C友好”?
从Introduction to Exception Programming Topics:
重要:你应该保留使用异常的编程或意外的运行时错误,如外的界限收集访问,试图改变一个不可改变的对象,发送一个无效消息,并失去与窗口服务器的连接。在创建应用程序时而不是在运行时,您通常会处理这些异常类型的异常。
...
相反例外,错误对象(NSError)和可可错误传送机制在Cocoa应用程序进行通信预计错误的推荐方式。有关更多信息,请参阅Error Handling Programming Guide For Cocoa。
所以,据我所知,只有在发生某些致命错误时才使用异常。否则,请使用NSError
对象。
+1 for NSError
。
我忘记了在哪里阅读了Apple文档,但我也回想起他们鼓励“先尝试,然后检查错误”的编码哲学,而不是“检查有效性,然后执行操作”。例如,在使用之前,不要查看网络是否可用,只要尝试使用它并在出现错误时回应错误。
我同意这个理念,因为(a)它将有效性检查移动到动作时刻,因此在某种意义上它更准确,而且(b,主观),使用代码更有趣这种模式。总之,建议使用NSError
,并提供NSError**
参数的即时反馈,该参数接受NULL
,以便对您的API用户非常友好!这种模式也在Cocoa/Touch的几个地方建立起来;例如NSString
方法writeToFile:atomically:encoding:error:。
这个问题可能是http://stackoverflow.com/questions/1503348/returning-errors-in-objective-c和http://stackoverflow.com/questions/2169728/how-should-c-手柄错误 - 在-AN-API – 2010-03-30 16:34:08