我有一个很大的问题,我不明白为什么会发生.情况就是这样: 在Cocos2D中有10个场景的精彩项目.每个场景都是一本带有巨大精灵的书页.它使用Kobold2D 1.0.2实现. 每个页面在单例类中都有公
>在Cocos2D中有10个场景的精彩项目.每个场景都是一本带有巨大精灵的书页.它使用Kobold2D 1.0.2实现.
>每个页面在单例类中都有公共对象,通过LayerColor放置一个公共菜单.
>精灵是PVR.CCZ RGBA4444和iPad内存中的TexturePacker
每个spritesheet加载大约16-20Mb.
>我使用CCTransitionTurnPage替换下一个的replaceScene.
>在每个页面(类)的init方法中,加载纹理和FrameFile.
>在每个页面(类)的onExit方法中,卸载纹理和frameFile.我使用了dumpCachedTextureInfo,并说我完全从内存中加载和卸载纹理.
>当然,我从孩子身上移走所有物品.我的所有精灵都是在.h的接口部分声明的公共变量,因为我需要在类的每个方法中访问它们.
>我的项目是在ARC项目中使用Kobold2D集成的(但是你知道附加的Kobold2D项目没有启用ARC兼容性问题)
事实上,当我开始这个项目时,一切看起来都很完美,但是对于我制作的每个场景(页面),内存都在增加. Page1:30Mb.,Page2:40,Page 3:54,Page 4:65 …在7或8个场景之后,Instruments,Xcode或iPad本身挂起应用程序而没有任何消息(除了具有最终低内存警告的仪器) .
为什么每个场景后都没有释放内存?也许是因为ARC和没有超级dealloc变量.为什么纹理看起来完全卸载但似乎没有卸载因为内存在崩溃之前无法控制地增长?
我遇到了类似的记忆保留问题,仪器上没有泄漏.我无法得到 – (void)dealloc甚至被调用,直到我将以下内容写入每个场景的.m文件:-(void) onExit { //unschedule selectors to get dealloc to fire off [self unscheduleAllSelectors]; //remove all textures to free up additional memory. Textures get retained even if the sprite gets released and it doesn't show as a leak. This was my big memory saver [[CCTextureCache sharedTextureCache] removeAllTextures]; [super onExit]; }
实现之后,我的内存在每个replaceScene:被调用后被释放.希望这对你有用.