在《 Mac OS X应用程序编程指南》中,“ Initializing a New Document”(添加了重点):


  如果覆盖init,请确保覆盖永远不会返回nil
  返回nil可能会导致崩溃(在某些版本的AppKit中)或
  呈现一个不太有用的错误消息。例如,如果您要
  在某些情况下防止创建或打开文件
  对于您的应用程序而言是唯一的,请覆盖特定的NSDocumentController
  方法代替。


从Xcode的自动生成的MyDocument.m中:

- (id)init
{
    self = [super init];
    if (self) {
        // Add your subclass-specific initialization here.
        // If an error occurs here, send a [self release] message and return nil.
    }
    return self;
}


苹果为什么在这里给出相互矛盾的建议?

最佳答案

一般习惯用法是-init可能会释放self并在发生错误时返回nil。您引用的“永不返回nil”文档专门讨论了NSDocument的子类化。基本上,在一般情况下,返回nil很好,但是对于NSDocument来说,这是个坏主意。 MyDocument.m的模板文件不了解NSDocument的情况,它只是为您提供-init方法的通用模板。

关于cocoa - 从init返回nil,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7395027/

10-13 23:57