我不确定如何完全杀死在cocos2d-iphone中使用图形的节点。
那究竟是什么意思?好吧,例如,我有一个CCTMXTiledMap
。它使用了一些纹理,对吧?好吧,我不再需要使用这个平铺的地图,所以我杀了它,并且我认为这样的纹理也被杀死了,内存被释放了。
我正在使用[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];
获取有关当前在内存中保存的纹理的信息。
CCTMXTiledMap *map = [CCTMXTiledMap tiledMapWithTMXFile:@"myMap.tmx"];
[self addChild:map z:0];
[[CCTextureCache sharedTextureCache]
dumpCachedTextureInfo]; // I get 32MB usage.
[self removeChild:map cleanup:YES]; // I assume this will "kill" the map.
[[CCTextureCache sharedTextureCache]
dumpCachedTextureInfo]; // I STILL get 32MB usage
正如您所看到的,从儿童中删除地图似乎并没有真正杀死它所使用的纹理。
我应该如何释放记忆呢?我认为CCSprites
等也是如此。根据CCTextureCache
,我只是继续堆叠内存直到我的应用崩溃。
注意:我知道我可以使用类似[[CCTextureCache sharedTextureCache] removeAllTextures];
的内容并清理所有内容。但这似乎并不高效。
答案 0 :(得分:1)
CCTextureCache
只会删除存在 NO 引用的纹理。我自己没有使用过CTMXTileMap
类,但也许那里有引用纹理的对象。 CCSpriteBatchNode
也是如此。您必须首先从缓存中删除spriteFrames
,然后删除removeUnusedTextures
,此时将回收内存。建议您在删除地图后使用removeUnusedTextures
。
我在CTMXTileMap
中没有看到明确的清理,它依赖于dealloc
来删除可能引用纹理的对象。也许(不确定),在重新测量之前,你应该给自动释放池一个机会最终释放地图。