1

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

我有一个 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]; 
        }
}
4

1 回答 1

1
  1. 编写易于维护的代码。
  2. 任何值得优化的东西都值得衡量。

时间使用这两种方法渲染一帧所需的时间。问问自己是否重要。

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

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

于 2012-06-11T16:01:59.297 回答