/// <summary> /// Gets an AttachedChangedListener using the provided actions. /// </summary> /// <param name="attachedHandler">An action called when the view is attached</param> /// <param name="detachedHandler">An action called when the view is detached</param> /// <returns>An AttachedChangedListener instance</returns> internal static AttachedChangedListener CreateChangedListener(Action <View> attachedHandler, Action <View> detachedHandler) { AttachedChangedListener listener; if (attachedHandler == null) { throw new ArgumentNullException(nameof(attachedHandler)); } if (detachedHandler == null) { throw new ArgumentNullException(nameof(detachedHandler)); } if (_listenerPool.Count != 0) { listener = _listenerPool.Pop(); } else { listener = new AttachedChangedListener(); } listener.AttachedHandler = attachedHandler; listener.DetachedHandler = detachedHandler; return(listener); }
/// <summary> /// Releases an AttachedChangedListener instance. /// </summary> /// <param name="listener">An AttachedChangedListener instance.</param> internal static void ReleaseChangedListener(AttachedChangedListener listener) { if (_listenerPool.Count < MaxPoolInstances) { listener.AttachedHandler = null; listener.DetachedHandler = null; _listenerPool.Push(listener); } else { listener.AttachedHandler = null; listener.DetachedHandler = null; listener.Dispose(); } }