在一个应用程序(OS X 10.6.7)中,我有一个NSWindowController
初始化为的子类——即-[NSWindowController initWithWindow:]
,我已经在代码中创建了窗口;我不是从笔尖加载它。
通常,我在我的NSWindowController
子类中使用[self window]
. 但在这种情况下,每次我发送[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