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