【问题标题】:NSException and NSError custom exception/errorNSException 和 NSError 自定义异常/错误
【发布时间】:2023-04-01 05:08:01
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c exception nserror nsexception


    【解决方案1】:

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

    NSException 专为可能致命的程序员错误而设计。这些错误旨在表示您的应用程序中的潜在缺陷,您没有正确检查执行某些操作的先决条件(例如尝试访问超出其边界的数组索引,或尝试改变不可变对象)。 Exception Programming Guide 的介绍稍微说明了这一点。

    【讨论】:

    • 哦,好的。所以为了处理溢出,我应该使用异常,因为它是我的应用程序中的一个缺陷?
    • 是的,如果是意外情况,使用正确的代码不应发生。
    • 哦,谢谢,但是问题的第二部分,创建我自己的异常类呢?
    • NSException 的子类并不常见:异常通常通过它们的名称(使用 +exceptionWithName:reason:userInfo:)而不是它们的类来区分。但是,您可以将@raise 任何类型的对象作为例外(NSStringNSObject,任何东西),没有特殊的接口要求(尽管不建议这样做)。
    • 更像 NSError==java unchecked Exception, NSException== java Error
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多