2013-01-15 20 views
0

我有一個簡單的CCScene只包含一個節點創建從一個CocosBuilder模板與[CCBReader nodeGraphWithFile:]方法。cocos2d場景重新分配和ccb節點

到目前爲止,我沒有發佈場景的dealloc方法中的ccb節點,因爲我期望它是自動發佈的。但是在配置分析器中,我注意到如果在CCDirector中多次按下/彈出場景,就會出現內存泄漏。

如果我實際上release節點在場景的dealloc方法中,這個內存泄漏消失。

爲什麼我需要釋放節點,儘管我沒有保留/ init它?有什麼我誤解了嗎?

回答

0

通過此創建的對象會發生什麼?

[CCBReader nodeGraphWithFile:] 

如果您將它分配給retain屬性,它將被保留;所以你需要明確地發佈它。例如: -

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

如果nodeGraph聲明爲保留財產,在[CCBReader nodeGraphWithFile:]創建的自動釋放對象會由酒店得到保留,你將需要釋放它dealloc

與此相反的不使用屬性保持到節點對象的引用,並將其直接添加到該節點層級:在這種情況下

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

,你就不需要做任何明確的發佈,因爲你不保留自己的對象。

+0

我不會將其分配給屬性。我只是通過'[add addChildNode:[CCBReader nodeGraphWithFile:...]];'將它添加到場景中。這就是爲什麼我很困惑 – fiddler

+0

因此,你在'dealloc'方法中發送了哪個對象? – sergio

+0

'[[self.children objectAtIndex:0] release]' – fiddler