0
我正在使用Cocos2d 1.01
。我有不希望的堆增長。爲了找出造成增長的原因,我拍了一張基線快照,進行了一次狀態更改並返回零狀態並重復堆積。我發現堆增長的主要原因是non-object
,然後查看堆棧跟蹤,注意到有問題的代碼似乎集中在CCLabelTTF
左右。與使用CCLabelTTF相關的堆增長
這裏,這似乎是有問題的代碼:
NSString *desc = [pEffectDescriptions objectAtIndex:i];
CCLabelTTF *descrptionLabel = [CCLabelTTF labelWithString:desc dimensions:CGSizeMake(290, 65) alignment:UITextAlignmentLeft fontName:@"Verdana-Italic" fontSize:10];
descrptionLabel.anchorPoint = ccp(0,0);
descrptionLabel.color = ccc3(192, 192, 192);
descrptionLabel.position = ccp(aSprite.position.x + 8, aSprite.position.y);
[self addChild:descrptionLabel z:10 tag:COMPARTMENT0+9600+i];
我不明白是什麼問題,因爲返回基態零之前,下面的代碼被執行:
for (int i=0; i<1000; i++) {
if ([self getChildByTag:COMPARTMENT0+9000+i])
[self removeChildByTag:COMPARTMENT0+9000+i cleanup:true];
}
我的推理是CCLabelTTF
歸屬於該層,並且它擁有NSString
(該陣列也保留NSString
)。然而,當我從圖層中刪除CCLabelTTF
,並且它的dealloc被調用時,它應該釋放CCLabelTTF
,然後它會釋放。數組引用NSString
是否有責任防止釋放CCLabelTTF
?
任何人都有線索?
不幸的是,因爲它索引從9000到9999,第一個循環只有55-100個項目。這樣一個奇怪的問題。我在某處做了一些愚蠢的事情,但試圖找到它。事情是,即使我彈出場景時,保留的項目也在那裏,我NSLog的dealloc方法,所以一切都應該被消滅。 –