如何从场景中删除CCNode并确保它从内存中释放? Cocos2d V3

时间:2017-01-26 23:52:34

标签: memory cocos2d-iphone

我有一个场景,我添加节点'page';

[self addChild:_page z:-1]; 

'page'在头文件中初始化为

@property CCNode* page;

当我从场景中删除页面时

[self removeChild:_page];

内存保持不变(通过调试导航器看到)。

这是一个问题,因为我添加和删除了许多包含高清图像,动画和物理环境的页面。添加和删​​除多个节点后,我收到内存不足警告,应用程序将崩溃。

1 个答案:

答案 0 :(得分:0)

以下是从内存中删除CCNode的大部分内容的代码。请注意,该节点不包含音频。

在实施文件的顶部添加以下行。

#import "CCTextureCache.h"

在您的实现文件中还添加了一个onExit方法。

-(void)onExit{
    [super onExit];
    [self removeAllChildren];
    [[CCTextureCache sharedTextureCache]removeUnusedTextures];
}

要确保删除纹理,您可以使用

[[CCTextureCache sharedTextureCache]dumpCachedTextureInfo];

使用Xcode中的调试导航器实时监控您的内存运行应用程序。

关于添加/删除节点的其他研究:

在cocos2d V3.x中,你不必担心"关于内存,因为一旦你的应用达到某个设备的特定内存阈值,并且你得到了“低内存警告”,CCAppDelegate将自动清除缓存的数据。

// purge memory
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
    [[CCDirector sharedDirector] purgeCachedData];
}

但是,在你加载大的,有时是多个纹理文件并且应用程序可能超过内存阈值的情况下,保持低内存可能是有益的。

删除未使用的数据也可能有助于删除可能存在潜在内存泄漏或可能影响程序的错误的代码。