我有一个很大的问题,我不太明白为什么会发生。情况是这样的:
- 在 Cocos2D 中有一个很棒的项目,有 10 个场景。每个场景都是一本书的一页,上面有巨大的精灵。它使用 Kobold2D 1.0.2 实现。
- 每个页面都有一个单例类中的公共对象,通过 LayerColor 放置一个公共菜单。
- 精灵是 PVR.CCZ RGBA4444 中的 TexturePacker,在 iPad 中,每个加载的精灵表大约 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 本身挂起应用程序而没有任何消息(除了具有最终低内存警告的 Instruments) .
为什么每个场景后没有释放内存?也许是因为 ARC 和没有 super dealloc 变量。为什么纹理看起来完美卸载但似乎没有卸载,因为内存在没有控制的情况下增长直到崩溃?