从init返回nil

时间:2011-09-12 23:02:19

标签: cocoa

在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;
}

为什么Apple会在此提出相互矛盾的建议?

1 个答案:

答案 0 :(得分:1)

一般习语是-init可以释放self并在发生错误时返回nil。您引用的“永不返回零”的文档专门讨论了子类NSDocument。基本上,在一般情况下返回nil很好,但对于NSDocument具体而言,这是一个坏主意。 MyDocument.m的模板文件不知道NSDocument案例,它只是为您提供了-init方法的通用模板。