2012-02-23 48 views
0

我有一个加载NIB文件,像这样一个自定义的控制器对象:ARC,笔尖文件,并释放顶级对象

- (id)init { 
    self = [super init]; 
    if (self) { 
     [NSBundle loadNibNamed:@"AccountSetup" owner:self]; 
    } 
    return self; 
} 

笔尖文件包含一个NSTabView项目。我注意到当我的自定义控制器对象被释放时,选项卡视图不会与它一起发布

我定制控制器对象扩展NSViewController从我的文档(1)阅读,在笔尖顶级的对象应该是自动,如果该文件的所有者扩展NSViewController发布:

如果文件的所有者不是NSWindowController或NSViewController的实例,那么您需要自行减少顶级对象的引用计数 。

如果我释放标签页面中定制控制部的dealloc它消失正确,但还是我想知道如果我失去了一些东西,如果文档是只是没有在这种特殊情况下非常精确。

1)https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4-SW18

回答

1

如果控制器的NSViewController一个子类,那么你正确使用它,绕过它的笔尖加载机制。你应该这样做:

- (id)init 
{ 
    self = [super initWithNibName:@"AccountSetup" bundle:nil]; 
    if (self) 
    { 
     //perform any initializations 
    } 
    return self; 
} 

通过绕过initWithNibName:bundle:方法和直接使用NSBundle方法,你是防止NSViewController从笔尖管理顶层对象。

+0

非常感谢!我怎么可能错过了... – Mark 2012-02-23 13:23:37