根据节点名称递归查询UI树上的某个节点

现在的项目封装了一个函数,用来根据节点名称递归查询UI树上的某个节点。这个函数使用起来确实是很方便,只要拿一个根节点和要查找的节点,就能获得你想要的。而不是使用一连串的getChildByName这样的方法。项目中现在是大规模的使用这个封装起来的函数。

问题是,这样的缺点也很明显,以至于通常来讲很少看到正常点的项目会大规模使用此类函数,缺点如下:

  • 递归函数很危险而且效率不高,容易导致函数调用栈溢出。尤其在查找一个处在整棵UI树的深层次位置的子节点时,执行效率堪忧。
  • 如果使用了此类函数,那么整棵UI树的所有子节点的名称必须要唯一,也就是不能重名。这显然很不合理。

最近我就踩了上面例举的第二条坑!本来想要查找到A节点,然后对其进行操作。但是发现这些操作无论如何不能产生效果!玛德,消耗了我个把小时!后来发现,整棵UI上还有个B节点,B和A的名称完全相同。而遍历整棵树时,总是会先查找到B节点,然后查找函数就返回结果,不会再继续遍历了!所以之前的操作其实是全部施加到B节点上去了…