iOSに最適なメモリ割り当て戦略は?


7

iOSでのメモリ割り当てについて私は議論しています。ほとんどのコードをC ++で記述していて、ObjectPools、FreeListsなどを使用するのが本当に好きです。ゲームの進行中に常に「割り当て/割り当て解除」する多くのものを事前に割り当てるために、パーティクル、ゲームエンティティなど)。

それでもiOSでは、PSPのようなコンソール向けに開発しているようなものではありません。PSPのように、一定量のメモリが確保されることは事実です。iOSは、システムがメモリを必要とするときに「メモリ警告」を発行します。

誰かこれについていくつかの提案がありますか?新しいiPod touch / iPhone 4はより多くのRAMを搭載しているので、深刻すぎますか?それともそれは大きな懸念ですか?

回答:


10

一般的なメモリ管理の感覚を使用してください。頻繁に割り当てられたり割り当て解除されたりするもの(パーティクル)、使用されていない空きメモリブロックには、プール/フリーリストを使用します。ただし、メモリの大きなチャンクを事前に事前に割り当てようとしないでください。iOSはメモリを保証せず、スワップもしないので、割り当てたメモリはシステムや他のアプリからリソースを奪っています。アプリケーションがすべてを占有しているためにシステムが十分なメモリを取得できない場合は、アプリを強制終了することになります。できるだけ多くのメモリを割り当て解除することで、applicationDidReceiveMemoryWarningを処理する必要があります。iPhone 4には大量のメモリがありますが、すべてのマルチタスク機能と人々がそれらを使用する傾向があるため、実際には思ったよりもメモリが少ない場合があります。

(また、アプリをプロファイリングして、メモリ割り当てがボトルネックになっているかどうかを確認することを忘れないでください!)


1

5oundの答えにメモをつけるには、メモリ警告のレベルに注意してください。iOS 3.2より前のバージョンでは、重大度の異なる警告を区別する方法がありませんでした(つまり、OSはUIImageの束の上に座っているだけでクリアできるのか、それともメモリが残っていないのですか?)。3.2以降では、メモリ警告のレベルを確認して、対処方法を決定できます。私の経験では、レベル1の警告は常にあり、避けられず、ほとんど意味がないので、私はそれらに応じて思い切った行動を取ることはしません。レベル2の警告は必ずしも差し迫った破滅の兆候ではありませんが、おそらくそれらを真剣に受け止め、可能なキャッシュのクリアを開始する必要があります。

ここでさまざまなレベルの良い議論があります:https : //stackoverflow.com/questions/2915247/iphone-os-memory-warnings-what-do-the-different-levels-mean

PS-これは5oundの回答に対するコメントの詳細ですが、コメントするのに十分な担当者がいないため、これが私の唯一の選択肢でした...


そしてこれに取り組むために:iOS 5はメモリ警告を多少異なる方法で扱います。
David Dunham
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.