取消注册单元格在TableView / CollectionView中重用是否有任何意义?

问题描述 投票:1回答:2

我正在制作具有一些生活质量特性的瘦自定义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作为第一个参数时,它们是模棱两可的。

那么 - 文档实际上期望我做什么?我可以把零点什么来帮助它选择其中任何一个吗?并且 - 取消注册真的有必要吗?我以前从来没有这样做过,我在网上找不到太多关于它的信息。保持一个细胞注册需要多少“费用”?我猜测实际上“取消注册”一个单元格要比注册它更加昂贵,因为取消注册将是一个实际的操作 - 但我可能在这里错了..

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

ios swift uitableview uicollectionview
2个回答
1
投票

我从来没有在我的生活中取消注册可重复使用的单元格,所以我不知道它是否值得,但如果你真的想要,你必须更加具体地使用你的代码。你是正确的,它无法正确解释方法。

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

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


0
投票

您可以将nil转发到UINib?,让编译器知道您指的是哪个register

self.register(nil as UINib?, forCellWithReuseIdntifier: identifier)
© www.soinside.com 2019 - 2024. All rights reserved.