在注销单元格中有什么意义可以在TableView / CollectionView中重用吗?

时间:2019-02-27 11:59:02

标签: ios swift uitableview uicollectionview

我正在制作具有一些生活质量功能的瘦自定义TableView-和CollectionView-子类,例如自动注册要重用的单元格,因此我不必在其余时间每次都编写该代码我的生活。

我在运行时生成cellIdentifiers,然后注册它们。我以为“为什么还不实现自动注销”,因为显然一个单元可能会被重新加载而永不返回。但我实际上无法找到方法。

基于有关为tableViewcollectionView注册单元格的文档,它表示以下内容:

  

如果要注销nib文件,可以为nib指定nil   通过指定的重用标识符。

但是,如果我(在我的子类UICollectionView中)尝试使用self.register(nil, forCellWithReuseIdentifier: identifier),则会收到错误

Ambiguous use of 'register(_:forCellWithReuseIdentifier:)'

我不知道为什么,但是我想可能是因为这两个功能:

register(_ cellClass:AnyClass?, forCellWithReuseIdentifier:String)
register(_ nib:UINib?, forCellWithReuseIdentifier:String)

当尝试将nil作为第一个参数传递时,它们模棱两可。

那么-文档实际上希望我做什么?我可以将nil扔给任何东西以帮助它选择其中之一吗? 而且-取消注册真的有必要吗?我以前从未做过,而且在网上找不到很多.. 保持一个单元注册需要多少“费用”?我猜想实际上“取消注册”一个单元比仅保留其注册要昂贵,因为取消注册将是一项实际操作-但我在这里可能错了。

我了解我可以使用相同的标识符注册不同的单元,这实际上将取消注册先前的注册,但是如果我100%确定我永远不会对不同的单元使用相同的标识符,我是否需要注销?

2 个答案:

答案 0 :(得分:1)

我一生中从未注销过可重复使用的单元,所以我不知道它是否值得,但如果您真的想要,则必须对代码进行更具体的说明。您是正确的,因为它无法正确解释该方法。

tableView.register(Optional<UINib>.none, forCellReuseIdentifier: "cheese")

将允许编译器计算出您正在使用的两种方法中的哪一种。

答案 1 :(得分:0)

您可以将nil下放到UINib?,以使编译器知道您所指的register

self.register(nil as UINib?, forCellWithReuseIdntifier: identifier)