Я знаю, что когда вы используете симулятор с cocos2d, память не выглядит так, как будто она освобождается, поэтому вы должны запустить ее на устройстве, чтобы получить точную картину того, что происходит.
Здесь есть хорошая дискуссия о cocos2d и памяти.
Что я заметил, так это то, что все, что вы создаете и сохраняете, должно быть освобождено, но оно не будет освобождено из памяти, пока я не сделаю это:
[[TextureMgr sharedTextureMgr] removeAllTextures];
Это освободит память.
Вот более крупный пример:
Sprite * sPopup = [[Sprite spriteWithFile:@"popup.png"] retain];
sPopup.position = cpv(240,440);
[self addChild: sPopup z:2];
[sPopup release];
Тогда, когда я закончу с sPopup в другой функции, у меня будет это:
[[TextureMgr sharedTextureMgr] removeAllTextures];
и память освобождается.