2011-12-03 7 views
0

ViewオブジェクトでremoveFromSuperviewを呼び出すときに問題が発生します。 - > MYVIEW 1目的CメソッドremoveFromSuperviewにより、割り当て解除されたオブジェクトにメッセージが送信される

addSubview

MYVIEWのALLOC:割当履歴(器具によれば)は、以下であるMYVIEW - > MYVIEW 2

MYVIEWリリース - > MYVIEW 1

MYVIEWのremoveFromSuperview - > MYVIEW 0

MYVIEWのにdealloc - > MYVIEW -1(removeFromSuperviewによって呼び出された)

私がいることを理解して参照カウントが0に達したため、deallocメソッドが呼び出されます。しかし、参照カウントが1つ減少してメッセージが割り当て解除されたメソッドに送られる理由を理解できません。

また、計測器を使用して検出することもできます。 xcodeを使用するとクラッシュしません。

ご協力いただければ幸いです。 ありがとうございました。

+0

最後の 'myView dealloc'を手動で呼び出すのですか、それとも' removeFromSuperview'によって呼び出されますか? – Paul

+0

removeFromSuperviewによって呼び出されています。 –

+0

myViewを最初にリリースせずにアプリを試しましたので、カウントはまだ2ですか?私は 'removeFromSuperview'が自動的に追加の' alloc'を処理すると思います。 – Paul

答えて

1

Xcodeで参照カウントの問題を見つけるもう一つの簡単な方法は、Analyzeを使用することです。コンパイラーは自動参照カウントを実装するのに十分なほどスマートなので、参照カウントで問題を見つけるのにも十分です。

+1

+1ええ、あまりにも=)私は明らかにすでに行われていたと仮定した。 – justin

0

この問題を整理する最も簡単な方法は、一般的に次のとおりです。参照カウントの記録を持つ楽器でプログラムを実行している

  • 実行は、あなたを
  • を停止する問題を再現
  • を有効に参照カウント履歴を分析し、履歴内の不適切な減分を見つける。

一度それをぶら下げたら、ゾンビを探すのに約2分かかります。