ユーザーが新しいウィンドウを作成して開くことができる ARC を使用して Cocoa で記述されたアプリケーションがあります。(文書モデルのようなものですが、nsdocument は使用していません。 )
新しいウィンドウごとに大量のメモリが必要です。ユーザーがウィンドウを閉じると、メモリを取り戻したいと思います。
単にウィンドウを非表示にすることは理解して[window close]
いますが、私も を使用していますが[[self window] setReleasedWhenClosed:YES]
、 とそのウィンドウの両方がNSwindowcontroller
閉じた後も存在しています。
ウィンドウの xib ファイル内のオブジェクトには、malloc で割り当てられた多数の大きな c 配列が含まれているため、windowcontroller のwindowWillClose:
メソッド内の通知センターに呼び出しを送信して、それらを解放しようとしました。通知は、関連するオブジェクト内のメソッドを呼び出して、ウィンドウが閉じる前に C 配列を解放します。繰り返しますが、これは何の効果もありません。アクティビティ モニターによると、配列を解放しようとするメソッドが呼び出され、配列が解放されたように見えても、メモリは解放されません。で配列を解放しようとしました-(void) dealloc
が、これはクローズ時に呼び出されることはないようです。
では、ウィンドウが閉じられたときにメモリを取り戻すにはどうすればよいでしょうか?
編集: Benoitによるこのstackoverflowページのコメントによると、
「ただし、ウィンドウ コントローラが所有するウィンドウでは、閉じたときのリリースは無視されます。」
本当?もしそうなら、ARCでそれを回避するにはどうすればよいですか?