objective-c - 如果 [super init] 返回 nil 为什么不抛出异常?

标签 objective-c cocoa-touch exception init

这被认为是典型的

- (id)init {
    self = [super init];
    if (self) {
        // <#initializations#>
    }
    return self;
}

但是使用像这样实际响应适当的东西不是更好吗?

- (id)init {
    self = [super init];
    if (self) {
        // <#initializations#>
    } else {
       @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"you think your constructor is executing, but it's not"] userInfo:nil]
    }
    return self;
}


这个问题的推论是,“在什么情况下 [super init] 会返回 nil你不应该在 init 方法中处理它吗?

最佳答案

不,Objective-C 中的异常是指您无法真正从中恢复的状态,而不仅仅是表明操作失败的东西。如果初始化失败,只需返回 nil 即可。

关于objective-c - 如果 [super init] 返回 nil 为什么不抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6574938/

相关文章:

ios - UIViewController 中的 UIRefreshControl

ios - Objective-C:将字符串参数传递给 taggesture @selector

objective-c - 在运行时替换包中的图像

ios - Swift 找不到接受提供参数的 '+=' 的重载

java - 在发生异常时关闭由 flatMap 打开的 Java 8 流?

html - 如何使用 Cocoa 将 html 文件转换为 pdf

objective-c - AQGridView iOS 创建自定义图标(图像+标签)而不是图像

objective-c - 释放对象时出现问题

c++ - 如何在发生异常时运行代码

javascript - 为什么javascript捕获的异常是空对象