我正在开发一个基于cocos2d的应用程序,我现在正在针对分配工具对其进行测试,以检查是否存在某些泄漏。我注意到有一些瞬间出现了16 MB的malloc,我实际上不能说出原因。我想这是与cocos框架有关的东西,但我不确定。
您是否曾经历过相同的行为?有时应用程序会在测试期间因此崩溃。
提前谢谢
Andrea
一些进一步的细节
似乎问题与cocos缓存精灵的方式有关。我正在使用zwoptex纹理图集。这是调用堆栈
+[CCSpriteSheet spriteSheetWithFile:capacity:] CCSpriteSheet.m:69
-[CCSpriteSheet initWithFile:capacity:] CCSpriteSheet.m:104
-[CCTextureCache addImage:] CCTextureCache.m:243
-[CCTexture2D(Image) initWithImage:] CCTexture2D.m:207
-[CCTexture2D(Image) initPremultipliedATextureWithImage:pixelsWide:pixelsHigh:]
在执行的那一点上,我实际上正在加载我拥有的最大精灵。约900KB。而其他人则很少。我是以错误的方式使用cocos吗? 例如,是否存在旨在减少这种峰值的参数。 但是我希望一旦缓存,图像就不会在我需要的时候加载。相反,我会在一段时间内不使用这种精灵时遇到新的尖峰。 然后我猜到如果我重新定位图像,缓存将不会被清除,但尽管我保留了它,但仍然会发生malloc。
我还想知道为什么在模拟器而不是设备上运行时应用程序RAM占用空间从3MB变为80MB
答案 0 :(得分:1)
当我使用iSimulate(注册加速度计数据和多点触摸(> 2)并传输到iSimulator)时,我也遇到过相同的情况。
答案 1 :(得分:0)
好的我想我可以回答我的问题
我在创建新的cocos2d项目时自动生成的app委托中找到了此方法
-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
[[CCDirector sharedDirector] purgeCachedData];
}
因此,似乎只要应用程序收到内存警告,就会清除缓存。所以当我实例化我的900KB精灵时,第一次分配16MB(确实非常奇怪),并且在执行期间有时会抛出内存警告,清除缓存并且必须再次加载它。这对你有意义吗?
无论如何,我已经对它进行了评论,游戏看起来更快,显然我必须检查一下,没有内存泄漏,但实际上我很确定它