Beispiel #1
0
    //删除一个发送者,这个时候连它的监听者也会被删除
    public static void Remove(EventNotifier notifier)
    {
        notifier.isRemove = true;
        if (m_fireCount > 0)
        {
            m_delayRemovesNotifiers.Add(notifier);//fire中的话,等到fire后才删除
            return;
        }

        if (notifier.observersById.Count != 0)//如果不加这一行,会导致foreach里有GC Alloc
        {
            foreach (EventObserver observer in notifier.observersById.Values)
            {
                AllFireNotifier.Remove(observer);
                if (!m_observersById.Remove(observer.Id))
                {
                    Debuger.LogError(string.Format("删除了不存在的监听者:{0}", observer.Id));
                }
                IdTypePool <EventObserver> .Put(observer);
            }
        }
        if (!m_notifiersById.Remove(notifier.Id))
        {
            Debuger.LogError(string.Format("删除了不存在的发送者:{0}", notifier.Id));
        }


        IdTypePool <EventNotifier> .Put(notifier);
    }
Beispiel #2
0
    //取消监听
    public static void Remove(EventObserver observer)
    {
        if (observer.IsInPool)
        {
            Debuger.LogError(string.Format("重复删除监听者:{0} {1}", observer.Id, Util.GetDelegateName(observer.GetDelegate())));
            return;
        }
        if (observer.removeCounter > 0 && m_fireCount > 0)
        {
            //    Debuger.LogError(string.Format("重复删除监听者:{0} {1}", observer.Id,  Util.GetDelegateName(observer.GetDelegate())));
            return;
        }
        observer.removeCounter = 1;
        if (m_fireCount > 0)
        {
            m_delayRemovesObservers.Add(observer);
            return;
        }


        if (!observer.isAll)
        {
            observer.notifier.Remove(observer);
            AllFireNotifier.Remove(observer);
        }
        else
        {
            AllNotifier.Remove(observer);
        }
        if (!m_observersById.Remove(observer.Id))
        {
            Debuger.LogError(string.Format("删除了不存在的监听者:{0}", observer.Id));
        }

        IdTypePool <EventObserver> .Put(observer);
    }