在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会在此提出相互矛盾的建议?
答案 0 :(得分:1)
一般习语是-init
可以释放self并在发生错误时返回nil。您引用的“永不返回零”的文档专门讨论了子类NSDocument
。基本上,在一般情况下返回nil很好,但对于NSDocument
具体而言,这是一个坏主意。 MyDocument.m的模板文件不知道NSDocument案例,它只是为您提供了-init
方法的通用模板。