我想知道是否有任何方法可以加速/加速UItableView / [重新加载数据]。
即使我使用以下方法在主线程上重新加载数据:
> [self.tableview performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:No]
我仍然认为结果很慢(每次重新加载表时刷新2到3秒,如果用户不断刷新表,则会产生糟糕的用户体验)。
这里有一些背景知识,它目前是如何运作的。
1)我在苹果启动时从数据库中创建的数据创建了我的UITableView(直到这里没有问题,如果花几秒钟我就没事了。)
2)我点击表格视图中的一个项目,打开一个新屏幕来修改元素。
3)修改元素后,我更改了表视图的数据库,以便我更改的元素位于表视图的顶部。
4)当我按下屏幕上的后退按钮来更改我的元素时,我实现了UITableView的ViewWillAppear,并在主线程上重新加载数据。
5)我观察到的是从一个屏幕到另一个屏幕的延迟大约2/3秒。从我的代码中删除重新加载数据行,使转换瞬间完成。所以问题实际上在重装数据中。
我的UITableView的每一行都包含以下元素:
我认为我的每个单元格可能都有太多的信息,因为当我只有一行而不是10行时,我可以看到加载时间的巨大差异。
希望得到社区的一些意见,看看是否可以采取任何措施来改进。最好的是能够在后台更新UI,例如,当我修改我的元素时,我在后台重新加载数据,这样当我回到上一个显示UITableView的屏幕时,我的视图是已经刷新了,
由于
答案 0 :(得分:1)
好的,我在这个网站上找到了解决方案:
http://www.raywenderlich.com/31166/25-ios-app-performance-tips-tricks#drawing
20)优化您的表格视图 表格视图需要快速滚动 - 当它们没有时,用户真正注意到滞后。 为了使您的表格视图顺利滚动,请确保您已实施以下所有建议:
通过设置正确的reuseIdentifier重用单元格。
尽可能多地使视图不透明,包括单元格本身。
避免使用渐变,图像缩放和屏幕外绘图。
缓存任何行的高度(如果它们并不总是相同)。
如果单元格显示来自Web的内容,请确保异步进行这些调用并缓存响应。 (关于这个问题的个人注释,因为这是我的问题:看看这个解释如何在UITableView中使用SDWebImage的其他网站http://keighl.com/post/sdwebimage-uitableviewcell/。非常有用。
使用shadowPath设置阴影。
减少子视图的数量。
在cellForRowAtIndexPath中尽可能少地工作:如果您需要做一些工作,只需执行一次并缓存结果。
使用适当的数据结构来保存您需要的信息。不同的结构对不同的操作有不同的成本。
使用rowHeight,sectionFooterHeight和sectionHeaderHeight设置常量高度,而不是询问代表。
答案 1 :(得分:0)
你说"背景颜色来自文件" - 这提醒我你正在进行IO工作,这通常非常耗时,如果你在显着提高速度的情况下从文件中加载了一种颜色,我很好奇吗?