虽然我不使用 Apple 玩具来执行此操作,但我每次运行我的应用程序时都会执行类似 heapshot 的分析:执行此操作的工具内置于我的每个类中,使我能够准确确定在程序执行期间的任何时候当前分配(未释放)的实例。当我将一个课程添加到一个项目中时,每节课需要做一些工作(比如大约 1 分钟),但在项目的整个生命周期中都是一个救命稻草。
在评论中回到您上面的问题,不,我不知道您的 500K。此刻唯一能弄清楚这一点的人就是你。如果您的游戏有一个逻辑点(如游戏主菜单),您可以在退出应用程序之前返回(我的意思是硬杀),那么我会在绘制菜单之后开始这样做:
// below code with cocos2d 2.x
NSLog(@"*** before purge ***");
[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];
[CCAnimationCache purgeSharedAnimationCache];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrames];
[[CCDirector sharedDirector] purgeCachedData];
[self scheduleOnce:@selector(dumpTextures) delay:0.5f];
// let the run loop cycle a bit
// to give a chance for auto-release objects to be
// disposed from the pool ...
-(void) dumpTextures {
NSLog(@"*** after purge ***");
[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];
}
并检查结果。寻找 cocos2d 仍然为你保留的任何纹理......到目前为止最有可能的内存猪。我认为 5-6 倍 500K 不会对峰值在 140Mb 左右的游戏产生太大影响。