cocos2d использует объем памяти - PullRequest
0 голосов
/ 05 декабря 2011

У меня абсолютно худшее время с нехваткой памяти в моей игре с cocos2d.

У меня 4 сцены.два исчезают из памяти, когда я переключаю сцены с помощью

[[CCDirector sharedDirector]replaceScene:sceneWithTransition]

Я пробовал push / pop, и это делает проблему примерно в 10 раз хуже.

2 сцен похожи на вирус.Условия, при которых я могу удалить их из памяти, не существуют.Я использую изменения ARC.Я надеялся, что они помогут, но не помогли.

Я переопределил метод очистки, чтобы избавиться от ссылок на все, что есть в сценах.Первая - сцена игрового процесса, и я могу представить, как возможно, что я пропустил что-то, что каким-то образом удерживает сцену.Однако другой является сцена настроек.Он состоит из 5 частей.они все брошены, и все же сцена не будет очищена.до преобразования в ARC приложение было непригодным для использования, оно часто ломалось, а когда оно не падало, ему не хватало памяти.После ARC он длится примерно в 4 раза дольше, чем раньше, но все еще регулярно исчерпывает память.Аварии, однако, почти не существует.

Полагаю, во-первых, как правильно переключаться между сценами?Во-вторых, как можно удалить что-то из памяти при использовании arch, потому что object = nil ничего не делает.Все остальные мои программы, использующие ARC, работают как мечты.Никто из них не использует движок cocos2d.Я не видел ошибки памяти с момента появления arc, пока не совершил ошибку, конвертировав свою игру quartz2d в cocos2d.Единственная причина, по которой я не возвращаюсь к платформе, которая действительно функционирует, заключается в том, что мне действительно нравятся возможные эффекты в кокосовых орехах, которые я просто не могу заставить работать в кварце.

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

push / pop из того, что я понимаю, использует модель «стека», таким образом, память не стирается при толкании или выталкивании новых сцен, что объясняет, почему это ухудшается при использовании этого метода.

Одним из способов экономии памяти, особенно во время перехода, является переход к загрузочной сцене, а затем переход к реальной сцене, которую вы хотите. Это связано с тем, что во время нормального перехода обе сцены занимают память одновременно как минимум на 1 кадр, тогда как дешевая сцена загрузки будет вместо этого занимать каждое из своих мест, уменьшая ужасный всплеск памяти, который часто возникает при переходе между двумя интенсивными сценами.

1 голос
/ 05 декабря 2011

Похоже, что у cocos2d было некоторые проблемы с ARC, которые были исправлены только недавно .

Я не знаю, связано ли это с проблемами с памятью, но вы можете проверить, какую версию cocos2d вы используете.

В любом случае, похоже, что cocos2d будет полностью поддерживать ARC только с версии 2.0. Таким образом, вам может быть лучше не использовать ARC и правильно настроить управление памятью, используя release. Насколько я знаю, у cocos2d нет проблем с памятью, поэтому вы должны быть в состоянии ее решить.

...