Objective c 正确处理平铺贴图或精灵中的纹理

Objective c 正确处理平铺贴图或精灵中的纹理,objective-c,performance,cocos2d-iphone,Objective C,Performance,Cocos2d Iphone,我不确定如何完全杀死在cocos2d iphone中使用图形的节点 那我到底是什么意思?例如,我有一个CCTMXTiledMap。它使用了一些纹理,对吗?嗯,我不再需要使用这个平铺贴图,所以我杀死了它,我假设这样的纹理也被杀死了,内存也被释放了 我正在使用[[CCTextureCache sharedTextureCache]dumpCachedTextureInfo]以获取有关当前保存在内存中的纹理的信息 CCTMXTiledMap *map = [CCTMXTiledMap tile

我不确定如何完全杀死在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]的东西并清理一切。但这似乎不是很有效。

CCTextureCache
只会删除不存在引用的纹理。我自己没有使用过
CTMXTileMap
类,但其中可能有引用纹理的对象。
CCSpriteBatchNode
也会发生同样的情况。您必须首先从缓存中删除
spriteFrames
,然后从缓存中删除
removeUnusedTextures
,此时将回收内存。建议您在作为子对象删除贴图后使用
removeUnusedTextures


我在
CTMXTileMap
中看不到显式清理,它依赖
dealloc
删除可能引用纹理的对象。也许(对此不确定),在再次测量之前,您应该给自动释放池一个最终释放地图的机会。

那么CCSprite呢?你怎么处理你的垃圾。。。在我回答之前,我会先读一下coco的代码:)。。。我的假设是,当我从其父级移除精灵时,缓存的保留计数会下降,removeUnusedTextures会将其剪掉并刷新纹理以回收内存。不是百分之百确定。@Omega:感谢上帝的怜悯,这个假设是正确的。removeUnusedTextures移除普通香草精灵(其父级为零)。我通过快速测试确认了这一点。是的,它似乎有效。TMXTiledMaps也是如此。所以,我只需要确保它们没有父对象,它们的纹理将在以后清除时变得不可用,对吗?是的,据我所知。我被我自己的一个“生物”愚弄了,这是一个手势精灵,它人为地抓住了一些精灵,因为我更喜欢点击记忆而不是“时间”。。。所以,如果我知道一个精灵很快就要回来了,我会让它变得黏糊糊的,然后我就可以移除unusettextures,而不会在运行时受到太多的影响。