0

iOS6 がビューをアンロードしなくなったため、UIViewController'sを呼び出さなくなったことを考えるとviewDidUnload、iOS5 でこれと同じ動作を引き起こす信頼できる方法があるかどうか疑問に思っていましたか?

つまり、iOS 6 でビューをアンロードしなくなった理由について Apple が示したのとまったく同じ理由で、iOS5 でビューをアンロードするのを本当に止めたいと思います (これは、かなりの量のメモリを節約できなくなり、ほとんどの場合、余分なバグの原因)。iOS5 でのみ発生し、メモリが少ない場合にのみ発生する可能性のある多くのケースをテストするよりも、便利な機能の開発に時間を費やしたいと思います!

私は周りを検索しましたが、以前にこの質問をしたことがある人を見つけることができず、驚いています. self.view への余分な参照を保持するviewDidLoad(および でのみ解放するdealloc) のと同じくらい簡単でしょうか? 可能性のあるトラップはありますか?

4

2 に答える 2

1

現在の主な違いは、ビューが で自動的にアンロードされずdidReceiveMemoryWarningviewDidUnload呼び出されないことです。

これは、ビューをアンロードしてはならないという意味ではありません。実際、WWDC ビデオでは、didReceiveMemoryWarning. 現在の主な違いは、何がいつ起こるかを完全に制御できることです。viewDidUnload多くの人は、ビューを削除してコントローラーを解放するだけの場合など、とにかく期待どおりに呼び出されないことが多いコードに依存していました。

メモリ警告でビューを解放したくない場合 (これもまた、必要な場合とそうでない場合があります)、view プロパティを nil に設定することはできません。コントローラーが空の場合didReceiveMemoryWarning、iOS 5 でも同様に機能します ( on を呼び出さずに super)。

ただし、これらの警告を真剣に受け止めることを真剣にアドバイスします。未使用の可能性のあるメモリをクリーンアップする唯一のポイントであり、ビューのバッキング ストアは非常に大きくなる可能性があります。

編集:ビューが少なく、頻繁に使用され、メモリ使用量が少ない場合にのみ、ビューをアンロードしないことを検討する必要があります。

于 2012-10-17T11:49:42.487 に答える
1

iOS5 では、ビューのアンロードを停止することはサポートされていません。また、iOS6 ではビューの処理方法がまったく異なるため、大きなメモリの問題が発生する可能性があります。iOS6 では、ビューのバッキング ストアは必要に応じて引き続きメモリから削除されます。または、少なくともメモリから削除できるようにマークされています。私の知る限り、iOS5 ではそうではありません。ビュー自体のサイズがほんの数バイトであっても、バッキング ストアはビュー自体が削除された場合にのみ削除されます。

このすばらしい投稿をご覧ください: iOS 6 でのコントローラーのライフサイクルの表示 これにより、コントローラーがどれほど複雑で、何を求めているかについてのアイデアが得られるかもしれません。

于 2012-10-17T11:47:44.570 に答える