0

ウィンドウのコンテンツビュー内でプログラムで作成した NSTextView があります。特定の状況下では、プログラムで編集を終了し、NSTextView を破棄する必要があります。これを行うと (ファーストレスポンダーを nil に設定し、removeFromSuperview を指定してポインターを解放することにより)、マウスをウィンドウ コンテンツ ビューの外に移動するまで、NSTextView の dealloc は呼び出されません。ウィンドウが NSTextView への参照をキャッシュしているようで、ウィンドウと対話していないと判断したときにのみ解放します。これは、関連付けられた textContainer の元に戻すグループ化を台無しにすることを除けば、問題にはなりません。

少しわかりにくいですが、これについて知っている人がいたら、ぜひ教えてください。

ありがとう

4

1 に答える 1

0

NSTextView の割り当て解除が延期される理由はまだわかりませんが、とにかくそれはニシンだったことがわかりました。元に戻すスタックが破棄された理由は、textDidChange コールバック内で NSTextView を破棄していたためです (ただし、実際の解放を延期するための保持/自動解放を使用しています)。

私の destroyTextView: コードを、私の textDidChange から performSelector:withObject:afterDelay で呼び出して延期すると、すべてうまくいきます (元に戻すスタックを使用)。

理にかなっている理由がわかりました...いつもそうではありませんか?

于 2013-11-22T15:53:18.503 に答える