【问题标题】:Reusable identifier cells versus returning a cell subclass?可重用标识符单元与返回单元子类?
【发布时间】:2019-07-02 04:25:58
【问题描述】:

我在 xib 文件中创建我的表格视图单元格,然后我在我的表格视图中注册并使用 tableView.dequeueReusableCell 方法在 cellForRowAt 中返回。在极少数情况下,我通过对它们进行子类化并手动编程接口来创建单元格,我通常只是初始化它们并从cellForRowAt 中返回它们。

我最近发现您可以使用tableView.register(cellClass: AnyClass?, forCellReuseIdentifier: String) 注册子类。我应该注册我的子类并通过dequeueReusableCell返回它们吗?使用它而不是返回初始化的子类有什么好处?

【问题讨论】:

    标签: ios uitableview cocoa-touch uikit


    【解决方案1】:

    您必须始终注册单元格(通过代码或故事板)。可重用性原则是 iOS Table 和 Collection 视图中最重要的原则。 这意味着表格视图仅在内存中绘制和存储当前可见的几个单元格+几个在最近的将来可见的单元格。如果您不使用可重用性,那么在使用大量单元时将会出现很大的性能问题。

    也不要忘记在单元子类的 prepareForReuse 方法中清理单元 ui

    【讨论】:

    • 不知道prepareForReuse 方法,谢谢提及
    • 你应该。如果标签可以立即填写在 cellFor 或 willDisplay 中,您将看不到差异。但是,一旦您尝试使用异步数据(例如图像加载)来执行此操作,您可能会看到旧图像如何被重用并在几秒钟内更新。我建议您尝试一下,只是为了知道它不应该如何工作)
    【解决方案2】:

    是的,您应该利用细胞重用系统。重用系统允许系统非常快速地响应您桌子上的滚动操作。系统不必从头开始实例化一个全新的单元格,只需获取它已有的单元格并更新其内容。

    通过每次创建一个全新的单元格来绕过该系统并不是一种理想的资源使用方式,更复杂的单元格可能会导致表格视图出现明显的延迟。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多