-[NSWindowController窗口]在用窗口初始化NSWindowController时保留窗口吗?
|
在一个应用程序(OS X 10.6.7)中,我有一个用
-[NSWindowController initWithWindow:]
初始化的ѭ0with子类,即,我已经用代码创建了窗口;我不是从笔尖加载它。
通常,我用[self window]
引用with0ѭ子类中的窗口。但是在这种情况下,每次我发送[self window]
时,窗口都会保留下来,所以最终导致大量泄漏。
这是预期的行为吗?目前,我只是通过将窗口存储在init
方法中的实例变量中而从未发送[self window]
来解决此问题。
我非常确定这不会发生,因为NSWindowController
试图加载窗口:-loadWindow
不保留窗口,-isWindowLoaded
返回YES
:
(gdb) set $window = (id)[self window]
Current language: auto; currently objective-c
(gdb) p (int)[$window retainCount]
$1 = 3
(gdb) p (BOOL)[self isWindowLoaded]
$2 = 1 \'\\001\'
(gdb) call (void)[self loadWindow]
(gdb) p (int)[$window retainCount]
$3 = 3
(gdb) p (int)[[self window] retainCount]
$4 = 4
(gdb) p (int)[[self window] retainCount]
$5 = 5
没有找到相关结果
已邀请:
1 个回复
贡炮逗握惫
保留窗户就可以了;该问题似乎与自动释放池有关。
输出为:
问题是我在Carbon事件处理程序(
)中做可可时忘记了创建一个池。这与我链接到的线程的上下文匹配。 通常,当不存在自动释放池时,我会看到一个异常,因此我猜测那里只是一个永不耗尽的池。