2011-09-12 45 views
0

返回nil從Mac OS X應用程序編程指南,(強調) 「Initializing a New Document」:由init

如果覆蓋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; 
} 

爲什麼蘋果在這裏給相互衝突的建議?

+1

您可能想提交一個關於衝突的錯誤。 https://bugreport.apple.com/ –

回答

1

一般習慣用法是,-init可能會釋放self並在發生錯誤時返回nil。你所引用的文件「永不返回零」特別提到了子類化NSDocument。基本上,在一般情況下返回nil是很好的,但對於NSDocument具體來說是個壞主意。 MyDocument.m的模板文件不知道NSDocument的情況,它只是爲您提供-init方法的通用模板。

+0

所以我們假設我正在創建一個基於數據的核心應用程序,並在MyDocument的'init'方法內創建託管對象模型。如果MOM無法成功創建,應該使用'init'做什麼? –

+0

如果你不能創建你的MOM,你應該NSAssert()。該計劃不會在這一點上前進。 –