Освобождение сцены 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:...]];
в этом случае вам не нужно делать какой-либо явный выпуск, поскольку вы не сохраняете объект самостоятельно.