我正在使用Cocos2d 1.01
。我有不希望的堆增长。为了确定导致增长的原因,我采用了基线快照,进行了状态更改并返回到零状态并重复了快照。我发现堆增长的主要原因是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];
我不明白问题是什么,因为在返回状态0之前,执行以下代码:
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}}的重新分配?
任何人都有线索?
答案 0 :(得分:1)
添加标签时,您需要向标签添加9600,而删除标签时只需添加9000。可能是吗?
PS:我建议使用位图字体,它们使用更少的内存,创建,更新和渲染更快。