NSException和NSError自定义异常/错误

hak*_*ata 12 exception objective-c nserror nsexception

我最近开始学习Objective-C,我正在开发一个iOS应用程序作为练习,无论如何,我想通过抛出异常来处理溢出(我来自Java背景),我只搜索引用NSException,但后来我阅读有关异常处理主题的部分,他们说要使用NSError,我读了参考但他们有相同的协议和方法,那么它们之间的区别是什么?哪个更好?

另外,我想创建自己的异常或错误类,是否应该包含任何方法或字段?(就像Exception在Java中实现接口时一样).谢谢

一二三*_*一二三 22

NSError适用于非致命,可恢复的错误.设计为由a捕获的问题NSError通常是用户错误(或者是可以呈现给用户的错误),通常可以从(因此-presentError:NSErrorRecoveryAttempting)中恢复,并且通常是预期的或可预测的错误(例如试图打开您无权访问或尝试在不兼容的字符串编码之间进行转换的文件.

NSException是为潜在致命的程序员错误而设计的.这些错误旨在表示您的应用程序中的潜在缺陷,其中您没有正确检查执行某些操作的前提条件(例如尝试访问超出其范围的数组索引,或尝试改变不可变对象)." 异常编程指南"的介绍对此有所解释.

  • `NSException`的子类并不常见:异常通常由它们的名称区分(使用`+ exceptionWithName:reason:userInfo:`),而不是它们的类.但是,您可以`@ raise`任何类型的对象作为异常(`NSString`,`NSObject`,任何东西),没有特殊的接口要求(尽管不建议这样做). (2认同)