我有一个自定义控制器对象,可以加载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>
答案 0 :(得分:1)
如果您的控制器是NSViewController
的子类,那么您正在错误地使用它并绕过其nib加载机制。你应该这样做:
- (id)init
{
self = [super initWithNibName:@"AccountSetup" bundle:nil];
if (self)
{
//perform any initializations
}
return self;
}
绕过initWithNibName:bundle:
方法并直接使用NSBundle
方法,阻止NSViewController
管理笔尖中的顶级对象。