ARC,Nib文件和释放顶级对象

时间:2012-02-23 11:22:48

标签: cocoa memory-management automatic-ref-counting nib

我有一个自定义控制器对象,可以加载Nib文件,如下所示:

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

Nib文件包含一个NSTabView项。我注意到,当我的自定义控制器对象被释放时,标签视图不会随之发布

我的自定义控制器对象扩展NSViewController,并且根据我在文档(1)中读到的内容,如果文件的所有者扩展NSViewController,则应自动释放Nib中的顶级对象:

  

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

如果我在自定义控制器的dealloc中发布标签视图,它会正确消失,但我想知道我是否遗漏了某些内容,或者在这种情况下文档是否不是很精确。< / p>

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

1 个答案:

答案 0 :(得分:1)

如果您的控制器是NSViewController的子类,那么您正在错误地使用它并绕过其nib加载机制。你应该这样做:

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

绕过initWithNibName:bundle:方法并直接使用NSBundle方法,阻止NSViewController管理笔尖中的顶级对象。