代码之家  ›  专栏  ›  技术社区  ›  Richard Topchii

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

  •  1
  • Richard Topchii  · 技术社区  · 6 年前

    我在跟踪一个 Advanced User Interfaces with Collection Views WWDC会议上,苹果工程师展示了一种组合多个 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 回复  |  直到 6 年前
        1
  •  1
  •   tktsubota    6 年前

    在退出队列之前注册可能效率很低,所以我不建议您在现有的选项中进行注册。

    虽然我没有真正的诊断来显示它,但在 viewDidLoad 应该不会对性能造成太大影响,因为这是苹果的建议。

    根据数据源的类别,可以创建单独的方法来注册特定的单元格类。然而,从总体上看,如果您想提高性能或速度,这并不是您应该关注的问题。