私は独自のバージョンの NSViewController を実装しようとしています (後方互換性のため)、バインディングで問題が発生しました: バインディングはターゲットを保持するため、ファイルの所有者を介してバインドするたびに円を保持します。
だから私はスーパービューからビューを明示的に削除し、トップレベルのオブジェクトを解放するだけでよいと考えました。これでバインディングが処理されます。これは、コントローラーがビューを保持していないためです。どこかに行って。しかし、何らかの理由で、私のビュー コントローラーはまだ解放されません。問題を示すサンプルアプリを次に示します。
http://dl.dropbox.com/u/34351/BindingsLeak.zip
ビルドして起動し、Cmd-K (「編集」メニューの「ニブの作成」) を押して、空のウィンドウに NIB をロードします。Cmd-K をもう一度押して、最初のビュー コントローラー (TestNibOwner) を解放し、新しいビュー コントローラーをロードします。ただし、古いView Controllerの割り当てが解除されることはありません。
チェックボックスの「値」バインディングを削除すると、問題なく解放されます。
release/retain/autorelease のオーバーライドにブレークポイントを設定すると、_NSBindingInfo が TestNibOwner を保持していることがわかりますが、リークの場合には決して解放されません。
誰でもこれを修正する方法を知っていますか?