2013-08-29 24 views
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

任何人都有線索?

回答

1

在添加標籤時,您將9600添加到標籤,而刪除時只添加9000到標籤。這可能嗎? PS:我建議使用位圖字體,它們使用更少的內存,創建,更新和渲染速度更快。

+0

不幸的是,因爲它索引從9000到9999,第一個循環只有55-100個項目。這樣一個奇怪的問題。我在某處做了一些愚蠢的事情,但試圖找到它。事情是,即使我彈出場景時,保留的項目也在那裏,我NSLog的dealloc方法,所以一切都應該被消滅。 –