Освобождение сцены cocos2d и узлы ccb

У меня простой CCScene содержащий только один узел, созданный из шаблона CocosBuilder с [CCBReader nodeGraphWithFile:] метод.

До сих пор я не выпустил узел ccb в dealloc метод сцены, потому что я ожидал, что он будет выпущен автоматически. Но в профилировщике распределения я заметил утечку памяти, если несколько раз нажать / выдвинуть сцену в CCDirector,

Эта утечка памяти исчезает, если я на самом деле release узел в сцене dealloc метод.

Зачем мне освобождать узел, хотя я не сохранил / не инициализировал его? Есть ли что-то, что я неправильно понял?

1 ответ

Что происходит с объектом, созданным через это?

[CCBReader nodeGraphWithFile:]

Если вы назначите его на сохранение свойства, оно будет сохранено; так что вам нужно выпустить его явно. Например:

self.nodeGraph = [CCBReader nodeGraphWithFile:...];

если nodeGraph объявляется как свойство сохранения, автоматически выпущенный объект создается в [CCBReader nodeGraphWithFile:] будет удерживаться в собственности, и вам нужно будет отпустить его в dealloc,

Сравните это с тем, чтобы не использовать свойство для сохранения ссылки на объект узла и добавить его непосредственно в иерархию узлов:

[self addChildNode:[CCBReader nodeGraphWithFile:...]];

в этом случае вам не нужно делать какой-либо явный выпуск, поскольку вы не сохраняете объект самостоятельно.

Другие вопросы по тегам