close
From http://blog.sina.com.cn/s/blog_4beb28f30100q8vv.html
一直以为都是在使用cocos2d开发游戏,当我添加一个结点时也比较喜欢使用[node addchild:child z:0 tag:ch]函数,当然在取得结点的也喜欢使用[node getchildbytag:ch];这样我个人认为比较简结,在程序中有些变量名也就避免了冲突,取而代之的是一个数字。这几个月以来一直都是这样取得 结点。但前几天才发现这做,算法上时间复杂度为O(n),跳进getchildbgytag函数的实现时,发现其结点是遍历其所有子结点,然后比较 tag,如果相等则返回该子结点的指针,如果不相等则返回空:
-(CCNode*)getChildByTag:(int)tag
{
for(CCNode * node in children)
{
if(node.tag==ch) return node;
}
return nil;
}
做为一个游戏,获取结点操作相当频繁,如果一直使用getchildbytag来取得,有时会使得游戏变得很卡,浪费了很多的cpu时间。从那以后的开发尽量少用或不用这个函数,改为成员变量比较好,减少了父结点遍历子结点的时间。从而提高程序的效率
全站熱搜