【问题标题】:How can I increase UITableVIew's performance?如何提高 UITableVIew 的性能?
【发布时间】:2011-07-29 18:40:43
【问题描述】:

我有一个具有表格视图的多线程应用程序。它在不同线程的后台收集数据。问题是,当用户滚动表格时,数据收集速度会降低 75%。而且有很多数据要收集,所以如果可能的话,我想让表格滚动将数据收集速度降低不超过 15%。

有没有办法让 TableView 仅在用户将手指从屏幕上移开时重绘?不要担心用户体验,让我担心。如果您有任何可以加快速度的想法,我很想听听。

【问题讨论】:

  • 您的意思是滚动表格会减慢您的连接速度吗?你看过 Instruments 中的 Time Profiler 工具吗?重新绘制表格是放缓的真正罪魁祸首吗?
  • 但是当线程完成时为什么不使用 NSNotification 重新加载单元格数据.. 并且数据已准备好在表格视图中加载...通过此链接 raywenderlich.com/4295/… 使用 NSNotification 我想你会不需要减少滚动速度...

标签: iphone ios multithreading xcode cocoa-touch


【解决方案1】:

听起来你的瓶颈是后台的“数据收集”,所以你可以考虑攻击它。您可以尝试在显示表格视图控制器之前预取大量数据并将其缓存在内存中。

如果特别复杂,您也可以尝试仅重绘部分单元格(例如,仅重绘文本而不是任何图像)。对于昂贵的操作,您可以使用延迟为 0 的方式执行选择器,这会将其扔到运行循环的下一次迭代(周围都是好策略)。

您能做的最好的事情是使用 Time Profiler 运行 Instruments 并攻击占用 CPU 最多的部分。

【讨论】:

    【解决方案2】:

    当用户拖动时,您可以尝试从dequeueReusableCellWithIdentifier 返回 nil。您可以通过调用self.tableView.draggingself.tableView.trackingself.viewTable.decelerating 来检查用户是否这样做(这可以识别拖动或轨道何时即将结束)。

    【讨论】:

    • 这会引发异常,但感谢您的建议。我通过返回一个空单元格来节省一点速度,除非 self.viewTable.decelerating,但还不够。即使我无论如何都只返回空单元格,也不够快。
    猜你喜欢
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2021-10-13
    • 2018-03-01
    相关资源
    最近更新 更多