我正在使用Cocos2d 1.01
. 我有不希望的堆增长。为了确定导致增长的原因,我拍摄了基线快照,进行了状态更改并返回到零状态并重复了 heapshot。我发现堆增长的主要原因是non-object
,然后查看堆栈跟踪,注意到有问题的代码似乎以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
?
有人有线索吗?