3

NB:私はこの前にいくつかの質問がなされているのを見ましたが、私の疑問を明らかにしたものはなかったようです。

iOS6より前では、すべてのアウトレット、画像や音声などの大量のリソースがに設定されていnilましたviewDidUnload。iOS6以降では、ビューがアンロードされなくなったため、これは当てはまりません。システムコールがdidReceiveMemoryWarningあり、これはそのようなリソースの中和を行うための新しい推奨される場所です。

では、コードがiOS4以降のすべてをサポートする必要がある場合はどうなるでしょうか。iOS 4および5を実行しているデバイスでviewDidUnloadは、引き続き呼び出されます。また、iOS6を実行しているデバイスでは、のみdidReceiveMemoryWarningが呼び出されます。

これは、両方の場所でコードを複製する必要があることを意味しますか?両方の場所で共通のメソッドを呼び出すことは良いアプローチですか?これが業界でどのように処理されているかについて、あなたの意見やアプローチを提供してください。

4

2 に答える 2

4

はい、6.0より前のバージョンのiOSをサポートしている場合は、のビューとそのコントロールに依存するものをすべて削除する必要がありますviewDidUnload。これは、デバイスで実行されているiOSの機能です。もちろん、デバイスが6.0以降を実行している場合、ビューはアンロードされません。とにかく、でキャッシュなどを削除する必要がありますdidReceiveMemoryWarning

不要なため、2つの方法でコードを複製しないでください。でビュー関連のクリーンアップviewDidUnloadとでキャッシュ関連のパージを実行しdidReceiveMemoryWarningます。そして、最も重要なことは、ビュー固有のクリーンアップをからコピーしないでください(への参照viewDidUnloadの設定など、Interface Builderがコードに追加するために使用したもの)。そうすると、iOS 6でメモリ警告が表示された場合、削除されていないビューへの参照が失われます。IBOutletnildidReceiveMemoryWarningIBOutlet

iOS 6を参照してください-viewDidUnloadはdidReceiveMemoryWarningに移行しますか?

于 2013-01-23T01:21:22.880 に答える
1

didReceiveMemoryWarningiOS 2.0以降で利用できるので、みんなのためにからviewDidUnloadに移動してみませんか?didReceiveMemoryWarning

于 2013-01-23T01:05:39.283 に答える