1
根據蘋果的documentation,初始化NSWindowController子類的推薦方法是通過調用init()和NOT initWithWindowNibName()。該文件接着說,既然一個NSWindowController可能只打算用它是專爲筆尖工作,然後讓子類調用超initWithWindowNibName,如果任何initWithWindowNib的......方法是子類都應該記錄一個錯誤調用。初始化NSWindowController子類
所以這是我寫的:
- (id) init
{
NSLog(@"init()");
return [super initWithWindowNibName:@"MyDocument"];
}
- (id) initWithWindowNibName:(NSString *)windowNibName
{
NSLog(@"error...use init() instead");
return nil;
}
- (id) initWithWindowNibName:(NSString *)windowNibName owner:(id)owner
{
NSLog(@"error...use init() instead");
return nil;
}
- (id) initWithWindowNibPath:(NSString *)windowNibPath owner:(id)owner
{
NSLog(@"error...use init() instead");
return nil;
}
當它運行時,我看到的輸出:
init()
error...use init() instead
所以......嗯?這是怎麼回事?
有一個stackoverflow question有關init()被調用兩次,分辨率爲一個實例正在通過代碼來實現,並通過筆尖等。我的筆尖根本沒有控制器對象。