我正在制作具有一些生活质量功能的瘦自定义TableView-和CollectionView-子类,例如自动注册要重用的单元格,因此我不必在其余时间每次都编写该代码我的生活。
我在运行时生成cellIdentifiers
,然后注册它们。我以为“为什么还不实现自动注销”,因为显然一个单元可能会被重新加载而永不返回。但我实际上无法找到方法。
基于有关为tableView和collectionView注册单元格的文档,它表示以下内容:
如果要注销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%确定我永远不会对不同的单元使用相同的标识符,我是否需要注销?
答案 0 :(得分:1)
我一生中从未注销过可重复使用的单元,所以我不知道它是否值得,但如果您真的想要,则必须对代码进行更具体的说明。您是正确的,因为它无法正确解释该方法。
tableView.register(Optional<UINib>.none, forCellReuseIdentifier: "cheese")
将允许编译器计算出您正在使用的两种方法中的哪一种。
答案 1 :(得分:0)
您可以将nil
下放到UINib?
,以使编译器知道您所指的register
:
self.register(nil as UINib?, forCellWithReuseIdntifier: identifier)