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时间。从那以后的开发尽量少用或不用这个函数,改为成员变量比较好,减少了父结点遍历子结点的时间。从而提高程序的效率

arrow
arrow
    全站熱搜

    zer931 發表在 痞客邦 留言(0) 人氣()