避免委托重复注册简单有效的方法

最近写代码遇到了一个很头疼的问题,UI在打开时将方法添加到委托里面,关闭或销毁UI,就把相关的委托给移除掉。但UI加了状态机,所以UI打开的方法往往会被调用了很多次。如果处理不当,相应的方法就会被重复添加到委托里面。尤其是到项目后期。此时我不能一个个修改相关UI的代码。这样不仅工作量大,而且很容易引出新的bug。
那怎么办呢?
解决办法:想到了从委托入手,每次再添加相关方法的委托时,我先移除该方法。这样就能保证,每个委托只被注册了一次。如果你确实想让一个方法注册两次。那你就继续加个添加次数的参数n,先让这个委托减这个方法n次,然后再添加这个方法n次。
委托相关加减的操作不会产生异常,请放心使用。
下面看代码:

Action func;
//保证方法只会被注册一次
public void RegisterFunc(Action action)
{
    func -= action;
    func += action;
}
public void RegisterFuncs(Action action,int registerTimes/*传入相同方法时,这个参数始终应保持一样的*/)
{
    if(registerTimes<2)
    {
        RegisterFunc(action);
    }
    else
    {
        for(int i=0;i<registerTimes;++i)
        {
            func-=action;
        }
        for(int i=0;i<registerTimes;++i)
        {
            func+=action;
        }
    }
}

最后希望对大家有所帮助。

猜你喜欢

转载自blog.csdn.net/liulei199079/article/details/77971066
今日推荐