1

特定のデバイスでのクラッシュの原因を突き止めようとしています。ビュー コントローラーが を受信して​​いることに気付きましたが、受信didReceiveMemoryWarningしていませんviewDidUnload。そしてAppleによると:

ビュー オブジェクトへの参照を解放するために didReceiveMemoryWarning を使用することはありません。それを使用して、viewDidUnload メソッドでまだ解放していないビュー関連のデータ構造を解放することができます。(ビュー オブジェクト自体は、常に viewDidUnload メソッドで解放する必要があります。)

そう、

A: なぜviewDidUnload呼び出されないのですか? ビュー オブジェクトが呼び出されない場合、ここでビュー オブジェクトを削除することはできません。

B: でビュー オブジェクトを削除しないとしたらdidReceiveMemoryWarning、他にどこで削除しますか?

C: ARC を使用していますが、ビュー オブジェクトを削除したり、配列を nil に設定したりする必要はありますか?

4

3 に答える 3

2

他の言及viewDidUnload:は iOS 6 で非推奨です。ただし、知っておくべき追加情報として、iOS 6 はバックグラウンドで魔法のことを行っているため、アンロードする必要はほとんどないということです。ビューUIViewのバッキングのビットマップ レイヤーを破壊しています。 CALayer(これは の最大の「部分」ですUIView)。ビューが再度必要な場合、iOS はdrawRect:ビューを構成する場所を呼び出し、すべてが問題ありません。

詳細については、Joe Conway のこの素晴らしい記事を参照してください: iOS 6 の ViewController ライフサイクル

于 2012-10-10T13:57:00.267 に答える
1

viewDidUnloadiOS6 では廃止されました。必要に応じてビューを削除することができますdidReceiveMemoryWarningが、それはあなた次第です。

このスレッドも役立つかもしれません。

viewDidUnload は ios6 で呼び出されなくなりました

于 2012-10-09T04:56:06.440 に答える
0

didReceiveMemoryWarning特に、ビューのアンロードではなく、ビュー コントローラーが簡単に再作成できるオブジェクト(つまり、UIIamges など) を解放することを目的としています。必要に応じて簡単に再作成できない限り、ビュー内のオブジェクトを解放しないでください。

于 2012-10-09T04:49:42.813 に答える