いくつかの状況では、いくつかの場所でオブジェクトを削除することに関連するリークがあります。配列と参照ポインタからの削除後の解放
前提: - 私はTreeオブジェクトのNSMutableArrayを持っています(Treeオブジェクトは自身を描画する方法を知っています)。 - 私は参照ポインタ(ツリー*が選択されています)は、基本的にどのツリーに最後に触れたかを指しています。 - *選択したポインタが弱い参照であることに注意してください。
これまでのところ良いです。
問題: ツリーを削除するとリークが発生します。リストから、削除されているツリーが配列から削除する前にすべてを内部的に解放していることを確認します(配列から削除すると、自動的にそのリリースが呼び出されます)。私は私のツリー*選択ポインタが自己プロパティを通じて触れツリー割り当てられていることに気づい :どのような私が試した
ツリー=
がself.selected。
...これを行うことで、それが保持されていることがわかります。だから私がしようとしたのは電話でした:
[self.selected release];
これは、ツリーがアレイから削除された直後に呼び出されました。 ...しかし、それは、それが本質的にすでにリリースされていると述べています。
質問: なぜこのエラーメッセージが表示されますか?私は配列からそれを削除しましたが、私のself.selectedポインタはまだ保持されている数を持っています。
おそらく、削除処理後にnilに設定する必要がありますか? または、削除プロセスの前に自動解放に設定する必要がありますか?
私の質問を改訂してください: *選択されたポインタは配列内のオブジェクトの保持カウントを持っているので、そのオブジェクトを配列から削除すると割り当てが解除されるのはなぜですか?私はそれに保持された参照を持っていたという事実は、それが正しい、割り当て解除されるのを防ぐ必要がありましたか? –
それでは、selfキーワードを使わずに*選択されたポインタを割り当てていました。削除プロセスを行った後、私はrefポインタの呼び出しを呼び出すことも、nilに設定しないでください。 これまでのところ漏れはありません! –
Shit。リーク、リーク、リーク、それは戻ってきた。 –