2

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

1 に答える 1