我正在关注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
}
这种方法的缺点是什么?
答案 0 :(得分:0)
在出列前注册的效率可能非常低,所以我不建议您使用这些选项。
虽然我没有真正的诊断来显示它,但在viewDidLoad
中注册每个可能的细胞类不应该对性能产生很大影响,因为这是Apple推荐的。
您可以根据数据源的类别制作单独的方法来注册特定的单元类。然而,在宏观方案中,如果你想提高性能或速度,这不是你应该关注的事情。