注册大量UICollectionViewCell类以便在UICollectionView中重用

时间:2018-04-11 11:04:23

标签: ios swift uicollectionview uicollectionviewcell wwdc

我正在关注Advanced User Interfaces with Collection Views WWDC会议,其中Apple工程师展示了一种将多个UICollectionViewDataSource对象组合在一起的方法,以实现更好的代码重用性和关注点分离。

在我的应用中,我使用UICollectionView,并希望实现类似的方法来构建UI。

UICollectionView要求在实际使用之前注册类以供重用。

如果我注册了应用中使用的所有可能的UICollectionViewCell子类,当特定屏幕实际只需要少数几个时,是否存在任何潜在的缺陷?

通过这种方式设计应用程序,我将避免引入自定义协议并查询DataSource以查找UICollectionView中实际使用的单元子类。

另一种方法是每次在出列前注册单元格:

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let model =... GET MODEL 
    let cellClass = MODEL.cellClass
    // Registering the cell class every time before dequeuing, ensuring it will be registered before dequeued
    collectionView.registerCellClass(cellClass)
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellClass.reuseIdentifier(),
                                                  for: indexPath)
    cell.configure(model)

    return cell
  }

这种方法的缺点是什么?

1 个答案:

答案 0 :(得分:0)

在出列前注册的效率可能非常低,所以我不建议您使用这些选项。

虽然我没有真正的诊断来显示它,但在viewDidLoad中注册每个可能的细胞类不应该对性能产生很大影响,因为这是Apple推荐的。

您可以根据数据源的类别制作单独的方法来注册特定的单元类。然而,在宏观方案中,如果你想提高性能或速度,这不是你应该关注的事情。