繁体   English   中英

iOS内存使用量变量?

[英]iOS memory usage variable?

我正在用cocos2d-iphone开发iPhone游戏。

我对CCSpriteFrameCache目前“拥有”多少内存特别感兴趣。 我想知道-有办法知道吗? 不使用任何Xcode工具?

也许有一个变量已经让我知道我的应用程序上的内存消耗估计值?

一般来说,您所构成的问题不容易解决。

对于CCSpriteFrameCache ,由于此类包含一个指向NSMutableDictionary的sprite框架(即纹理)的指针,因此您可以迭代字典并累积纹理尺寸(乘以每个像素的大小)。

另一种方法是将字典转换为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等。

实际上,如果您担心纹理的内存消耗,它们将由CCTextureCache存储。 那里有一个CCTextureCache(调试)方法,称为dumpCachedTextureInfo方法。 我自己还没有尝试过,但是在这里:

@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));
}

您要为每个纹理计算位格式,因为可以根据当前需要在缓存中存储不同的纹理格式。 它将为您(最后一行)提供内容摘要,包括消耗的总内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM