【问题标题】:WHEN you run self=[super init] and it returns nil, what is the correct response?当您运行 self=[super init] 并返回 nil 时,正确的响应是什么?
【发布时间】:2011-08-29 01:05:43
【问题描述】:

我在 may 类的实例中运行这段代码:

-(id)init {
    self = [super init];
    if (self) {
        // my init code here
    }
    return self;
}

...self 返回 nil。我知道这是正确的程序,应该这样做。但是如果 self 返回 nil,我的反应应该是什么?抛出程序失败并终止的警报?忽略它 ?或者是否有推荐的程序可以安全地继续?

【问题讨论】:

    标签: objective-c xcode null


    【解决方案1】:

    我知道这听起来是递归的,但我认为在这种情况下最好的办法是返回 nil。

    当从初始化程序返回 nil 值时,您无法真正预测对象的状态,因此最安全的做法是处置该对象。从初始化程序中,这意味着只返回 nil 给调用者。

    当 alloc]init]ing 时,在我看来这种情况会导致泄漏,所以我一直很犹豫是否只是盲目地调用 alloc]init]。

    【讨论】:

      【解决方案2】:

      我从未亲眼见过这种情况。但是由于 objc 处理 nil 处理得非常好,我不会担心通过返回你从 super 收到的 nil 来处理超出你已经在做的特殊情况。

      【讨论】:

      • 我认为这是 Objective-C 的错误,它允许您将消息发送到 nil。这意味着您可能会耗尽内存,直到很长时间后才发现它,此时您不知道如何优雅地处理问题。
      • 你到底要怎么用完内存?
      • @Don 从 -init 方法返回 nil 表示初始化过程中发生了一些故障。如果内存不足, +alloc 将返回 nil 并且 -init 永远不会被调用。我更喜欢 Objective-C 范式。每次创建新对象或接收对象作为方法参数时忘记检查返回值时,您不必担心 NULL 指针异常。您只需明确检查应用中重要的内容。
      猜你喜欢
      • 2011-10-07
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2023-04-07
      相关资源
      最近更新 更多