cocos2d-x3.2 内存管理

        图片缓存没去掉,这游戏里面广泛的问题。TextureCache::removeUnusedTextures这个方法只有在纹理计数为1的时候才会移除内存中缓存的Texture。这里有一个问题要先说一下:当咱们建立一个精灵的时候,这张精灵所使用的Texture是会加载到内存中缓存着的。一旦你再次建立一个使用相同纹理的精灵,这个时候若是内存中还存在这张纹理的缓存,就会直接取出,而不用从新建立。当一个精灵建立的时候,在其内部调用addImage方法的时候,把引用计数作了+1处理,此时引用计数为2.当移除这个精灵的时候,引用计数会-1,这个时候引用计数为1。若此时你调用了TextureCache::removeUnusedTextures的方法。那这张纹理将从内存中移除。可是如果像以前说的,有两个精灵同时使用了这张问题,那该纹理的引用计数为3,必须两个精灵都移除后,才能释放内存。缓存

        这边还有一点很重的是:只有在removeChild的时候,引用计数才会作-1处理,而cocos的removeChild是没有对其子节点进行remove处理的,也就是说,子节点中对于Texture的引用计数仍在,致使TextureCache::removeUnusedTextures的时候,纹理没办法有效的移除。对象


因此这里建议的方案是:游戏

1.在移除一个节点以前,先遍历移除其子节点,释放引用计数图片

2.在层或者场景切换的时候,手动调用TextureCache::removeUnusedTextures方法内存

PS:在addChild的时候,会把对象放入容器中,而放入时会对其进行retain()的处理;在removeChild的时候,会把对象从容器中移除,会对其进行release()的处理rem

相关文章
相关标签/搜索