2010-03-30 41 views
11

我们正在为iphone开发人员编写一个API,我们不知道异常处理的最佳做法。我们研究了标准POSIX方式NSErrorNSException当为iPhone编写API时,什么是错误处理的最佳实践?

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

+0

这个问题可能是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

回答

14

Introduction to Exception Programming Topics

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

...

相反例外,错误对象(NSError)和可可错误传送机制在Cocoa应用程序进行通信预计错误的推荐方式。有关更多信息,请参阅Error Handling Programming Guide For Cocoa

所以,据我所知,只有在发生某些致命错误时才使用异常。否则,请使用NSError对象。

2

+1 for NSError

我忘记了在哪里阅读了Apple文档,但我也回想起他们鼓励“先尝试,然后检查错误”的编码哲学,而不是“检查有效性,然后执行操作”。例如,在使用之前,不要查看网络是否可用,只要尝试使用它并在出现错误时回应错误。

我同意这个理念,因为(a)它将有效性检查移动到动作时刻,因此在某种意义上它更准确,而且(b,主观),使用代码更有趣这种模式。总之,建议使用NSError,并提供NSError**参数的即时反馈,该参数接受NULL,以便对您的API用户非常友好!这种模式也在Cocoa/Touch的几个地方建立起来;例如NSString方法writeToFile:atomically:encoding:error: