我正在研究一点cocos2d演示的内存测量,演示的任务是将一个png图像添加到cocos2d纹理缓存中,我使用的监视器是Instruments中的Allocations和Activity Monitor。
测试设备是ipod touch4。
为了找到app的内存和分配的实时字节之间的关系,我设计了两个测试场景。
第一种情况是将纹理添加到缓存中,立即将其删除。测试代码如下:
CCTextureCache * cache = [CCTextureCache sharedTextureCache];
CCTexture2D * tex = [cache addImage:@“textureatlas_RGBA8888.png”];
[cache removeTexture:tex];
第二种情况是将纹理添加到缓存中,但是将其保留在缓存中。测试代码如下:
CCTextureCache * cache = [CCTextureCache sharedTextureCache];
CCTexture2D * tex = [cache addImage:@“textureatlas_RGBA8888.png”];
png文件的大小为270KB,大小为1024 * 1024,颜色深度为32位,其纹理将占用1024 * 1024 * 4字节(32位)= 4096 KB的缓存。
测试结果如下:
第一个方案的结果:
在将图像添加到缓存期间,实时字节将升至 6.16MB ,在一段时间内,它将返回略高于 2.08MB 。
在应用程序完成所有操作之前,活字节的级别将保持稳定。此时,活动监视器中的实际内存为 11.61MB 。
第二种情况的结果:
第二次测试的图形与第一次测试类似,但是,当实时字节稳定时,真实男性 15.62MB 。
我的第一个问题是:
为什么图表几乎相同即使我在第二种情况下不删除缓存中的纹理?分配不会将纹理视为内存中的活字节吗?
第二个问题是:
正如我从本文中学到的:如何优化Cocos2D应用程序(http://www.learn-cocos2d.com/2012/11/optimize-memory-usage-bundle-size-cocos2d-app/)的内存使用量和包大小,因为png文件将首先转换为UIImage,然后添加到纹理缓存,一个1024 * 1024纹理使用4MB内存,加载它会在短时间内使用8MB内存,为什么我无法在分配跟踪图中观察?
感谢您的帮助。