gpt4 book ai didi

cocoa - ARC、Nib 文件和释放顶级对象

转载 作者:行者123 更新时间:2023-12-03 17:58:58 26 4
gpt4 key购买 nike

我有一个自定义 Controller 对象,它加载 Nib 文件,如下所示:

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

Nib 文件包含单个 NSTabView 项。我注意到,当我的自定义 Controller 对象被释放时,选项卡 View 不会随之释放。

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

If the File’s Owner is not an instance of NSWindowController or NSViewController, then you need to decrement the reference count of the top level objects yourself.

如果我在自定义 Controller 的 dealloc 中释放选项卡 View ,它会正确消失,但我想知道我是否遗漏了某些内容,或者文档在这个特定的方面是否不太精确案例。

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

最佳答案

如果您的 Controller 是 NSViewController 的子类,那么您就错误地使用了它并绕过了它的 Nib 加载机制。你应该这样做:

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

通过绕过 initWithNibName:bundle: 方法并直接使用 NSBundle 方法,您将阻止 NSViewController 管理顶级对象在 Nib 。

关于cocoa - ARC、Nib 文件和释放顶级对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9412063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com