gpt4 book ai didi

iphone - 长时间运行的操作(用于更新当前显示的iphone TableView 中的数据)的最佳实践是什么?

转载 作者:行者123 更新时间:2023-12-03 13:22:32 25 4
gpt4 key购买 nike

背景:

我有一个tableview显示大约8个部分,每个部分都有我自己的PlaceList类(代表对象列表)作为后盾(该实现使用NSMutableArray)。总共约有200个对象。每个部分对应于对象距当前位置的距离(例如1英里以内,10、25、50等)。

时不时地,我需要响应来自CoreLocation的异步通知,该通知要求我重新计算每个对象所属的部分,更新每个对象的距离(在每个单元格中显示),并重新排序每个列表,然后重新加载表格 View 。我也在viewWillAppear中执行此操作。

在执行更新的操作(PlaceList中的方法)中,我使用了@synchronized(self),以防OS从多个线程中调用它(目前我自己不使用其他线程)。但是,当前此操作会导致UI有时会“冻结”,因此我正在研究在其自己的线程中执行此操作的方法。

问题:

  • 对支持表 View 的数据进行这种长时间运行的操作的最佳方法是什么?据我所知,剥离后台线程来执行操作是不安全的,即使完成后我使用performSelector在主线程上重新加载表 View ,用户仍然有可能会点击一个单元格当操作正在运行并且数据与显示不一致时。并且添加任何类型的锁定都只会达到目的。
  • UI和CoreLocation locationManager是否在同一线程上发送其通知,即我可以安全地放弃PlaceList上的@synchronized(self)吗?
  • 最佳答案

    这是我对您的问题的理解。您有大量的数据列表,并且在某些时候它将变得无效。为了使它再次有效,您必须进行一些处理才能重新绘制表。

    如果正确,这里有一些选择。

    1)双缓冲您的数据。只要您显示的东西“正确”,用户就可以与之交互。当您获得触发器以重新处理数据时,请在后台使用副本对其进行处理,并在准备好完全重绘时进行更新。该更新可能是突然的并且很大,但是显示的数据将始终是正确的,或者至少是健全的,并且UI继续起作用并且不会吓user用户。

    这在很大程度上避免了线程问题,因为通知不会修改数据并尝试同时显示它们。

    AFAIK,Facebook应用程序以及TwitterFon似乎都可以做到这一点。至少是这样。很难确定。

    2)载入画面!不好玩,但是有效。当您知道数据不好时,抛出一个半透明的面板,告诉用户稍等一下。

    它真的归结为现在或以后更新。您必须决定哪些折衷方案最适合您的应用程序。

    关于iphone - 长时间运行的操作(用于更新当前显示的iphone TableView 中的数据)的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1027694/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com