堆积增长与使用CCLabelTTF有关

时间:2013-08-29 10:39:50

标签: objective-c memory-management xcode4 cocos2d-iphone heap

我正在使用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}}的重新分配?

任何人都有线索?

1 个答案:

答案 0 :(得分:1)

添加标签时,您需要向标签添加9600,而删除标签时只需添加9000。可能是吗?

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