关于事件的源码疑问

我用的是cocos3.6的版本,最近学习了一下事件的源码,暂且有碰到三个让我不是理解的问题;
1:在EventDispatcher中,定义了多个map,其中key都是listenerid,那么这个listenerid有什么作用,我看EventListener里有类型这个属性,用这个做key不行么。
2:在Layer中,设置吞噬事件,为什么是这样?

void Layer::setSwallowsTouches(bool swallowsTouches)
{
    if (_swallowsTouches != swallowsTouches)
    {
        _swallowsTouches = swallowsTouches;

        if( _touchEnabled)
        {
            setTouchEnabled(false);
            setTouchEnabled(true);
        }
    }
}

先设置了开启为false,然后又设置为true?这里是误写还是别有用心?
3:对于吞噬事件

void Layer::setSwallowsTouches(bool swallowsTouches)
void EventListenerTouchOneByOne::setSwallowTouches(bool needSwallow)
void Widget::setSwallowTouches(bool swallow)

layer的方法名称和其他的不同,这个是不规范的写法还是本身功能就不一致呢?

希望有人授业解惑,谢谢!

setTouchEnabled(false)是为了移除旧listener,这个看它的实现就明白了
方法名不同是因为这几个代码是由不同的人写的,代码规范没做好