Cocos2d:引用与getChild性能的使用

时间:2012-06-11 14:11:16

标签: iphone ios performance cocos2d-iphone

我不确定哪种方法会给我带来更好的表现:

我有一个GameScene类,我倾向于在其中分配一个对象,然后将它们作为子项添加到带有标记的类中。我研究过的很多例子都使用了这种方法,但是当我需要频繁访问子对象时(例如,更新GameScene中的得分标签),我不确定它是否是最好的。在这些情况下,我想知道在性能方面是否更好的方法是声明指向那些经常使用的对象并使用它来访问对象而不是通过标记获取子对象。

使用getChildByTag或通过指针访问这些对象是否更有效?

As example I provide a label that I frequently update during the game, e.g. it could be the score label:

@interface GameScene : CCLayer 
{
    CCLabelTTF *frequentlyUsedLabel;
}

//Implementation

-(id) initWithId:(int)sceneId
{
    if ((self = [super init]))
    {
        //..code
        frequentlyUsedLabel = [CCLabelTTF labelWithString:@"Hearths:" fontName:@"Arial" fontSize:20];
        [self addChild:frequentlyUsedLabel]; 
        }
}

1 个答案:

答案 0 :(得分:1)

  1. 编写易于维护的代码。
  2. 任何值得优化的东西都值得衡量。
  3. 使用两种方法渲染帧所需的时间。问问自己是否重要。

    额外的内存开销有点难以衡量(特别是,如果您的CCLayer子类没有声明任何额外的ivars,Cocos2D 可能使用更高效的智能分配器)。我的看法是4个字节是单个像素使用的内存量。

    使用UIKit,我个人觉得使用ivars比担心标签唯一性要容易得多(特别是在不同应用程序中重用代码或在多个地方使用视图时)。 ARC的情况尤其如此,因为您不再需要担心getter / setters / retain / release。