そのため、特定の状況下でのオブジェクトの削除に関連するリークがある場所もあります。
前提: - Tree オブジェクトの NSMutableArray があります (Tree オブジェクトは自分自身を描画する方法を知っています)。- 基本的に最後に触れたツリーを指す参照ポインター (Tree *selected) があります。- *selected ポインターは弱参照であることに注意してください。
わかりました、これまでのところとても良いです。
問題: ツリーを削除するとリークが発生します。リストから、削除されるツリーが配列から削除する前にすべてを内部的に解放していることを確認します(配列から削除すると、自動的にリリースが呼び出されます)。
私が試したこと: Tree *selected ポインターが self プロパティを介してタッチされたツリーに割り当てられていることに気付きました:
self.selected = ツリー;
...そして、これを行うことで、それが保持されていることがわかります。だから私がやろうとしたのは電話でした:
[自己選択リリース];
ツリーが配列から削除された直後にこれを呼び出しました。...しかし、その時点でクラッシュし、本質的には既にリリースされていることを示しています。
質問: このエラー メッセージが表示されるのはなぜですか? 配列から削除しましたが、self.selected ポインターにはまだカウントが保持されているため、解放するべきではありませんか?
おそらく、削除プロセスの後に nil に設定する必要がありますか? または、おそらく、削除プロセスの前に自動リリースに設定する必要がありますか?