0

私は、メモリ不足によるクラッシュを避けるためにコードを強化しようとしています。私は特に、これらの手順に沿って発生する1つに立ち往生しています:ヘルプ - エンドレスデアロッコループ

  1. スタートアプリ。
  2. モーダルビューコントローラを表示するタップボタン。
  3. メモリの警告をシミュレートします。

どこからでも、私は最初の(提示している)viewcontrollerがメモリ警告を受け取り、そのdeallocメソッドがクラッシュするまで何度も呼び出されることがわかります。デバッグの目的のために、私はdidReceiveMemoryWarning、viewDidUnload、またはNSLogステートメントを除くdeallocメソッドに何も持っていません。

のようなこの音を何

?たぶん、ビューコントローラに戻ってポインタを持ついくつかの保持されたインスタンス変数がありますか?私はこれを引き起こしている可能性のある一般的な推測が必要です。 1000行の中にあるビューコントローラコード全体を投稿することはできません。

ありがとうございました。

+0

うーん、それはのdeallocだ打ったとき、あなたのビューコントローラ上の保持カウントを見てきました。私はそれが1でなければならないと思います。もう一つの考えはコントローラを保持しているデリゲートを持っていて、これに2つの間にループがありますか? – drekka

+0

新しいプロジェクトやシンプルなView Controllerで再生することはできますか? – Eimantas

+0

ええ、私は問題を見つけたと思う。メインウィンドウにビューを追加した直後に私はビューコントロールを私のappdelegateで解放していました。愚か。それに応じてこの質問にお答えください。私はそれを受け入れます。 – ed94133

答えて

2

あなたは、あなたがビューコントローラを解放オーバーのケースを固定考える最新のコメントで示されているが、私はそれについてとてもよく分かりません。ビューコントローラをオーバーリリースすると、まだdeallocが1回だけ呼び出されます。むしろ適切な[super dealloc];よりも、あなたのdealloc方法で[self dealloc];を呼んでいる「クラッシュがするまで何度も呼ばれるdeallocメソッド」の

Aはるかに可能性が高い原因。この点でコードが正しいことを確認してください。問題を引き起こす無限の再帰があるかもしれません。 :)

+0

+1私の考えを正確に。 – csano

+0

これは原因ではないように見えますが、それは意味をなさないでしょう。私はそれがビューコントローラの保持カウントを保持しているように、何か変わったものでなければならないと思います。ビューが解放されたとき(モーダルコントローラの下に表示されないとき)、View Controllerにdeallocが送信されました。おそらく内部エラー状態が発生しました。この時点で、実行されているすべてのコードは、割り当てられていないビューコントローラ、またはプレゼンタのないモーダルビューコントローラにありますか?とにかく、私は、アプリケーションのデリゲートでビューコントローラを解放し、このエラーは発生しなくなりました。 – ed94133

0

あなたViewControllers releaseメソッドを上書きしていましたか?私は一度それを上書きするのではなくdeallocの代わりにしました。深夜コーディングFTL。