UITableView:创建索引的最高效方式?
Posted
技术标签:
【中文标题】UITableView:创建索引的最高效方式?【英文标题】:UITableView: most performant way to create index? 【发布时间】:2017-05-05 06:52:21 【问题描述】:我有一个相当大的 UITableView(大约 10k 个条目),我需要一个索引并且它应该是可排序的;在旧设备(例如 iPhone 4s、iPhone 5)上,它有时会在搜索过程中挂起一点,因为我总是需要重新创建索引。
我不需要本地化,但UILocalizedIndexedCollation
还是要走的路吗?还是有一个标准的 ios 东西来创建性能索引?
【问题讨论】:
你现在如何创建索引? 【参考方案1】:1、也许你应该尝试保存索引高度之前,你可以创建一个框架模型,并保存你的索引框架,每次创建索引都会使用你之前创建的框架数据例如
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
NSDictionary *dict = self.dataList[indexPath.row];
CGRect rect = [dict[@"frame"] CGRectValue];
return rect.frame.height;
那么您可以使用此模式来创建单元格。
2、你说我需要创建这么多单元格,我不知道你使用什么数据源,但是如果使用网络数据,并且异步加载,你的应用程序可能会打开这么多队列运行,当你滚动或者当你的网络不是那么大时,它会很糟糕,所以我建议你应该重新创建数据加载方法,当你快速滚动时,只加载这个区域周围的单元格,当你慢慢滚动时,你可以在数据源中异步加载图像和文本, 你可以使用 uiscrollviewdelegate 函数来做这件事
NSArray *visiblePaths = [self.tableView indexPathsForVisibleRows];
for (NSIndexPath *indexPath in visiblePaths)
//get cell you can see
//get datasource object,when object loading complete,stop loading.
<code>
when tableview stop scroll,loading image
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
if (self.tableView.dragging == NO && self.tableView.decelerating == NO)
//star loading image,async
<code>
【讨论】:
"large" 不是指高度,而是指条目数量:) 对不起,我的英语不好,我的意思是你有很多数据需要加载,你可以试试这个以上是关于UITableView:创建索引的最高效方式?的主要内容,如果未能解决你的问题,请参考以下文章