Правильное удаление текстур с плиточных карт или спрайтов - PullRequest
0 голосов
/ 13 февраля 2012

Я не уверен, как полностью убить узел, который использует графику в 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]; и все почистить.Но это не кажется очень эффективным.

1 Ответ

1 голос
/ 13 февраля 2012

CCTextureCache удалит только текстуры, для которых существуют ссылки NO . Я сам не использовал класс CTMXTileMap, но, возможно, там есть объекты, которые ссылаются на текстуру. То же самое происходит с CCSpriteBatchNode. Сначала вы должны удалить spriteFrames, затем removeUnusedTextures из кэша, после чего память будет освобождена. Рекомендуется использовать removeUnusedTextures после удаления карты как ребенка.

Я не вижу явной очистки в CTMXTileMap, он полагается на dealloc для удаления своих объектов, которые могут ссылаться на текстуру. Может быть (не уверен в этом), вы должны дать возможность пулу авто-релизов наконец выпустить карту, прежде чем снова проводить измерения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...