0

いくつかのボタン、テキストフィールド、およびメソッドを含むビューがあります。ビューを読み込んで別のビューに切り替えてから元に戻すと、アプリがクラッシュします。NSLogクラッシュする前の最後のメソッド呼び出しが何であるかを確認するために、各メソッドにを追加しました。-(void)dealloc{

なぜこのメソッドが呼び出されたのか疑問に思いますか?ビューをリロードするたびに呼び出されますか?私は自分のコードを再確認しましたが、どこにも呼び出さないことは間違いありません。


編集:私の問題を見つけました、私はビューを保存するために使用していた配列をリリースしていました。@Darrenのおかげで、問題を追跡しました。

4

2 に答える 2

0

クラスが不要になり、メモリから削除されると、Dealloc が呼び出されます。ビュー内の何かを保持しているポインターがなくなると、割り当てが解除されます。

ビューへの/からの切り替えはどのようにしていますか?

ビューに(強い)ポインタを設定すると、自動的に割り当てが解除されません。

于 2012-07-16T21:52:46.423 に答える
0

-deallocオブジェクトの参照カウントが 0 になるたびに呼び出されます。問題を見つけるには、どのオブジェクト-deallocが呼び出されたかを調べます。コール スタックの 2 番目のメソッドは何ですか? 第3?-deallocそもそも有効なオブジェクト ポインタに送信されましたか?

この種のアプローチにはいくつかの方法があります。適切な最初のステップは、NSZombies (Google for it) をオンにすることです。deallocこれにより、無効なオブジェクトにメッセージ (たとえば、 など) を送信しているかどうかがわかります。通常、これはクラッシュを引き起こしますが、NSZombies では代わりに適切なエラー メッセージが表示されます。

于 2012-07-16T21:52:46.447 に答える