0

NSView がいつ解放されるかを検出する方法はありますか?

その理由は、いくつかの単純なデリゲート (-control:textView:doCommandBySelector: を処理して return/tab キーを入力できるようにする NSTextField デリゲートなど) があるためです。このデリゲート オブジェクトを nib に貼り付け、NSTextField のデリゲート接続を接続して動作させたいと思います。

それは機能しますが、リンクされている NSTextField が解放された後でもデリゲートは決して解放されないため、デリゲート オブジェクトがリークします。

デリゲート オブジェクトが NSTextField の割り当てが解除されたことを検出できるようにしたいのですが、これを行う方法が思いつかないため、他のコントローラーからデリゲート オブジェクトへの別のリンクを保存する必要があります。ある時点で手動で解放しますが、これは理想的とは言えません。何か案は?

4

1 に答える 1

1

私は以前にこれをよく調べましたが、オブジェクトの割り当てが解除されたときにそれを観察する方法はないようです。弱いポインタクラスでそれを行う1つの方法を見てきましたが、それは厄介になる可能性のあるisaスウィズリングを伴います。これがウェブサイトです:http://www.cocoadev.com/index.pl?WeakPointers

nibファイルから作成されたオブジェクトは、他の場所に保持されていない限り、nibの所有者の割り当てが解除されたときに割り当てを解除する必要があります。たとえば、NSWindowControllerの割り当てが解除されると、nibがロードされたときに作成されたすべてのオブジェクトが解放されます。デリゲートオブジェクトの割り当てが解除されていない場合は、他の場所に保持されているか、保持サイクルがあることが原因である可能性があります。

于 2009-07-28T09:20:16.913 に答える