当苹果UITableView
为第一款 iPhone 开发时,他们在滚动浏览它时遇到了性能问题。然后一位聪明的工程师发现,造成这种情况的原因是对象的分配是有代价的,所以他想出了一种重用单元的方法。
“对象分配有性能成本,特别是如果分配必须在短时间内重复发生 - 例如,当用户滚动表格视图时。如果您重用单元格而不是分配新单元格,您将大大提高表格视图的性能。”
来源:iOS 参考库
要重用您使用的单元格:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
现在,我想知道的是,这里实际发生了什么?如果有一个具有该标识符的单元格并仅返回该标识符,它是否会在 TableView 中查找?好吧,是的,但是如果它发送引用而不是分配,并且我有一个表格视图,假设具有相同标识符的 4 个单元格都可见。它如何在不分配的情况下将自己乘以四个实例?
我想知道这一点,因为我正在构建一个日历类型的组件,并且所有单元格都具有相同的结构,只有更改中的文本。因此,如果我能以某种方式重用我的单元而不是分配,我想我可能会获得更好的性能。
我自己的理论是它分配了四个单元格(仅仅是因为它也有)。当一个单元格从屏幕上消失时,它将被放入 TableView 重用队列中。当需要一个新单元格时,它会在队列中查找具有相同标识符的单元格是否可用,它会调用prepareForReuse
该单元格上的方法并将自己从队列中删除。