我有一个很大的问题,我不太明白为什么会发生。情况就是这样:
事实上,当我开始这个项目的时候,一切看起来都很完美,但是我制作的每一个场景(页面)的记忆都在增加。Page1: 30 54,Page2: 40,3: 54,4: 65.在7或8个场景之后,仪器、Xcode或iPad本身不带任何消息挂起应用程序(除了具有最终低内存警告的仪器)。
为什么每个场景之后都没有内存释放?也许是因为ARC和无超级去合金化变量。为什么纹理看起来完全卸载,但似乎没有卸载,因为内存正在增长,没有控制,直到崩溃?
发布于 2012-03-05 19:08:54
我在记忆保持方面也有类似的问题,在仪器上也没有泄漏。在我将以下内容写入每个场景的.m文件之前,我甚至无法得到-(void) dealloc的调用:
-(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:之后,我的内存就被释放了。希望这对你有帮助。
发布于 2013-04-10 09:10:17
经过几个月的工作,我在Cocos2D上学到了最重要的一课。当您将任何CCNode对象放置在CCArray、NSArray或NSDictionary上时,保留值增加1。这意味着必须在CCLayer或CCScene dealloc之前从该对象释放对象。
您必须将数组removeAllObjects或字典发布在- (void)清理上,并且在删除所有对象之后,然后进行超级清理;
同时,on - (void) onExit必须从实例中删除所有调度程序。不仅仅是调度程序本身。记得在任何stopAllActions上使用CCNode。但是,要小心,因为从CCNodes (雪碧或其他什么东西)停止行动必须在清理之前,在任何removeAllObjects之前。
请记住:如果CCLayer或CCScene没有正确地删除,SimpleAudioEngine not也会释放音频。
https://stackoverflow.com/questions/9237347
复制相似问题