ReusableViewPool

open class ReusableViewPool : NSObject

通用可重用视图缓存池,可继承

使用方式如下,代码示例详见WebView:

  1. 应用启动完成时配置全局重用初始化句柄并调用enqueueReusableView(with: ReusableViewType.self)预加载第一个视图
  2. 重用视图初始化时调用:let reusableView = ReusableViewPool.shared.dequeueReusableView(with: ReusableViewType.self, viewHolder: self)
  3. 在需要预加载的场景中调用:reusableView.fw.preloadReusableView() 预加载下一个视图
  4. 在需要回收到缓存池时(一般控制器deinit)调用:ReusableViewPool.shared.enqueueReusableView(reusableView)
  • 单例模式对象,子类可直接调用

    Declaration

    Swift

    public class var shared: `Self` { get }
  • 最大缓存数量,默认5个

    Declaration

    Swift

    open var maxReuseCount: Int
  • 最大预加载数量,默认1个

    Declaration

    Swift

    open var maxPreloadCount: Int
  • 最大重用次数,默认为最大无限制

    Declaration

    Swift

    open var maxReuseTimes: Int

Lifecycle

  • 初始化方法,内存警告时自动清理全部

    Declaration

    Swift

    override public required init()

Public

  • 获得一个指定类和唯一标志的可复用视图

    Declaration

    Swift

    @MainActor
    open func dequeueReusableView<T>(with reusableViewType: T.Type, viewHolder: NSObject?, reuseIdentifier: String = "") -> T where T : UIView

    Parameters

    reusableViewType

    可重用视图类型

    viewHolder

    视图的持有者,一般为所在控制器,持有者释放时会自动回收

    reuseIdentifier

    重用附加唯一标志,默认空

    Return Value

    可复用的视图

  • 预加载一个指定类和唯一标志的可重用视图并将它放入到回收池中,最多不超过maxPreloadCount

    Declaration

    Swift

    @MainActor
    open func preloadReusableView<T>(with reusableViewType: T.Type, reuseIdentifier: String = "") where T : UIView
  • 回收可复用的视图

    Declaration

    Swift

    @MainActor
    open func recycleReusableView(_ reusableView: UIView?)
  • 销毁指定的复用视图,并且从回收池里删除

    Declaration

    Swift

    @MainActor
    open func clearReusableView(_ reusableView: UIView?)
  • 销毁在回收池中特定类和唯一标志的视图

    Declaration

    Swift

    open func clearReusableViews<T>(with reusableViewType: T.Type, reuseIdentifier: String = "") where T : UIView
  • 销毁全部在回收池中的视图

    Declaration

    Swift

    @MainActor
    @objc
    open func clearAllReusableViews()
  • 重新刷新在回收池中的视图(触发willEnterPool)

    Declaration

    Swift

    @MainActor
    open func reloadAllReusableViews()
  • 判断回收池中是否包含特定类和唯一标志的视图

    Declaration

    Swift

    open func containsReusableView<T>(with reusableViewType: T.Type, reuseIdentifier: String = "") -> Bool where T : UIView