私はcocos2d-iphoneでiPhoneゲームを開発しています。iOSメモリ使用量は?
私は特に、現在CCSpriteFrameCacheが「保持している」メモリの量に興味があります。私は疑問に思っています - それを知る方法はありますか?任意のXcodeツールを使用せずに?
おそらく私のアプリでの推定メモリ消費量を知っている変数がありますか?
私はcocos2d-iphoneでiPhoneゲームを開発しています。iOSメモリ使用量は?
私は特に、現在CCSpriteFrameCacheが「保持している」メモリの量に興味があります。私は疑問に思っています - それを知る方法はありますか?任意のXcodeツールを使用せずに?
おそらく私のアプリでの推定メモリ消費量を知っている変数がありますか?
実際にテクスチャのメモリ消費が懸念される場合は、CCTextureCacheによって格納されます。 dumpCachedTextureInfoメソッドと呼ばれるCCTextureCache(Debug)メソッドがあります。私はここでそれを自分自身を試してみましたが、していない:
@implementation CCTextureCache (Debug)
-(void) dumpCachedTextureInfo
{
NSUInteger count = 0;
NSUInteger totalBytes = 0;
for (NSString* texKey in textures_) {
CCTexture2D* tex = [textures_ objectForKey:texKey];
NSUInteger bpp = [tex bitsPerPixelForFormat];
// Each texture takes up width * height * bytesPerPixel bytes.
NSUInteger bytes = tex.pixelsWide * tex.pixelsHigh * bpp/8;
totalBytes += bytes;
count++;
CCLOG(@"cocos2d: \"%@\" rc=%lu id=%lu %lu x %lu @ %ld bpp => %lu KB",
texKey,
(long)[tex retainCount],
(long)tex.name,
(long)tex.pixelsWide,
(long)tex.pixelsHigh,
(long)bpp,
(long)bytes/1024);
}
CCLOG(@"cocos2d: CCTextureCache dumpDebugInfo: %ld textures, for %lu KB (%.2f MB)", (long)count, (long)totalBytes/1024, totalBytes/(1024.0f*1024.0f));
}
あなたはあなたの現在のニーズに応じて、キャッシュ内の異なるテクスチャフォーマットを格納することが可能であるため、テクスチャあたりのビット形式を計算します。それは消費された総メモリを含む内容の要約を(最後の行)与えるでしょう。
一般的に言えば、あなたが抱いている問題は解決しにくいです。 CCSpriteFrameCache
の場合
、このクラスはテクスチャであるスプライトフレームのNSMutableDictionary
へのポインタを含んでいるので、あなたが辞書を反復し、(各画素のサイズを掛けた)テクスチャ寸法を蓄積することができました。
別のアプローチは、このようにNSDataの辞書を変換することになります。
NSData * data = [NSPropertyListSerialization dataFromPropertyList:spriteFrameDictionary
format:NSPropertyListBinaryFormat_v1_0 errorDescription:NULL];
NSLog(@"size: %d", [data length]);
が、これはCCSpriteFrame
クラスにNSCodingプロトコルを実装するためにあなたを必要とします。
テクスチャのサイズを累積すると、ピクセルサイズで幅と高さを掛けることができます。画素サイズは画素フォーマットに依存する:RGBA8888は32ビット、RGB565は16ビット、また、開いているglテクスチャのサイズは2:256x256,512x512、1024x512などとなるよう考慮する必要があります。
これはsegioの答えと同じ結果ですか? – Voldemort
私はSergioの答えは間接的な方法であると考えています。さらに、各テクスチャがピクセルごとに特定の「重み」を持つかもしれないという事実を明示していませんでした。この方法は馬の口からまっすぐです。最後に、spriteFrameCacheを使用すると、解釈が困難になることがあります。たとえば、アニメーションの場合、(キャッシュ内の)多くのspriteFramesが同じテクスチャを指すためです。 coco内のすべてのテクスチャは、textureCache内で1回だけ終了します(私が知る限り)。 – YvesLeBorg