アプリケーション (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