0

我正在使用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

有人有线索吗?

4

1 回答 1

1

添加标签时,您将 9600 添加到标签中,而删除标签时,您只会添加 9000 到标签中。会是这样吗?

PS:我建议使用位图字体,它们使用更少的内存,创建、更新和渲染更快。

于 2013-08-29T17:27:51.040 回答