在《 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/