我最近开始学习Objective-C,正在开发一个iOS应用作为练习。我想通过抛出异常来处理溢出(我来自Java的背景),我搜索了文献资料,只找到了NSException
,但在异常处理部分,他们建议使用NSError
。我阅读了参考资料,但它们具有相同的协议和方法,那么它们之间有什么区别?哪个更好?
此外,我想创建自己的异常或错误类,是否应包含任何方法或字段?(例如,在Java中实现Exception
接口时)。
谢谢
我最近开始学习Objective-C,正在开发一个iOS应用作为练习。我想通过抛出异常来处理溢出(我来自Java的背景),我搜索了文献资料,只找到了NSException
,但在异常处理部分,他们建议使用NSError
。我阅读了参考资料,但它们具有相同的协议和方法,那么它们之间有什么区别?哪个更好?
此外,我想创建自己的异常或错误类,是否应包含任何方法或字段?(例如,在Java中实现Exception
接口时)。
谢谢
NSError
旨在处理非致命、可恢复的错误。它被设计用于捕获那些通常是用户错误(或者是可以呈现给用户的错误),可以经常从中恢复(因此有-presentError:
和NSErrorRecoveryAttempting
),并且通常是预期的或可预测的错误(例如尝试打开没有访问权限的文件,或者尝试在不兼容的字符串编码之间进行转换)。
NSException
是为可能致命的程序员错误而设计的。这些错误旨在表示应用程序中潜在的缺陷,在这些缺陷中,您没有正确检查执行某些操作的前提条件(例如尝试访问超出其边界的数组索引或尝试改变不可变对象)。异常编程指南的介绍对此进行了一些解释。
NSException
的子类很少见:通常通过名称(使用+exceptionWithName:reason:userInfo:
)而不是它们的类来区分异常。但是,您可以将任何类型的对象(NSString
、NSObject
或其他任何类型)作为异常@raise
,没有特殊的接口要求(尽管这并不推荐)。 - 一二三NSError
不会触发异常处理程序。 - 一二三