2012-04-08 10 views
3

...例えばIOSイメージのメモリ使用量

: 私は、この特定のケースではその2000ワット、2000Hが、iphone、iPodは持っているというイメージを持っています四角形の460x920(ちょっとした例)...画像がiOSデバイスの矩形でちょうど見える場合は、メモリが使用されていることがわかりますが、イメージの残りの部分は現在は描画されません長方形の中に?メモリが消費されていますか?またはiOSは描画されたセクションにのみメモリを使用していないほどスマートですか?またはこれはメモリリークと見なされますか?

いくつかのゲームでは、視差ノードなどを使用して大きな画像を使用すると、より長いシナリオが必要になるため、これは不思議です。しかし、私はこれが私の記憶にどのように影響するのだろうかと考え始めました

ご回答いただきありがとうございます。

答えて

8

iPhone 4には512MBのRAMがあります。それはCPUとGPUの間で共有されます。つまり、ビデオRAMはその一部を消費します。

UIImageについては2000ピクセルで割り当てられています。オフスクリーンであっても、を消費します。正確に言えば、それは約16MBの、2000 * 2000 * 4を消費します。これはObjective-cランタイムによって管理されます。これはかなり大きい額です。私が知る限り、4シリーズデバイスのUIImageの最大サイズは2048x2048で、3シリーズでは1024x1024です。

表示矩形、またはあなたが話している画面は、ビデオRAMの一部です。典型的な表示手順では、グラフィックスハードウェアがそれを表示できるようにビデオRAMに画像を合成する。

したがって、512MBのRAM内に2枚のイメージがあります。 1つはコード(RAM)でロードして変更でき、もう1つは表示用に小さなもの(VRAM)です。 VRAMでは、画面のサイズのみが使用されます。

いいえ、これはメモリリークではありません。

+0

ありがとう、非常に精巧な応答... –

+1

私に尋ねるのが気にならない場合は、このタイプの状況を処理するための最良の方法は何ですか?明らかに私は私のゲームのために大きな背景イメージが必要なので、すべてのメモリを使用したくないので(アニメーションを作ることは問題になります)...私はその瞬間に必要なメモリをどうすれば使えますか?すべての画像をメモリにロードするのではなく、 答えをくれた人は、「あなたはCATiledLayerのようなものを使って画像をよりよく管理できる」と言った。それはこの状況のた​​めの最善の解決策ですか? –

+1

ゲームの画像が小さくなる傾向があります。つまり、あなたのデザインを改訂するほうがいいでしょう。あなたは少しでも魅力的な "CATiledLayer"を見つけるかもしれません。 http://www.cimgf.com/2011/03/01/subduing-catiledlayer/をご覧ください。基本的には早い段階でGoogleマップのように機能します。大きなイメージは小さなタイルに分割され、サイズが大きすぎるため、必要に応じてタイル単位でリソースバンドルタイルからロードすることが唯一実行可能なソリューションです。 –

2

はいイメージ全体がメモリに読み込まれました。 CATiledLayerのようなものを使って画像をより良く管理することができます。

+0

ありがとう、私はそのCATiledLayerを試してみます。 –