gpt4 book ai didi

iphone - 如何在更新 UITableView 时在后台线程中执行网络任务?

转载 作者:行者123 更新时间:2023-12-03 21:20:54 28 4
gpt4 key购买 nike

只是想弄清楚设计此类功能的最佳方法是什么?基本上我发送一个异步 NSURLConnection ,它会命中发送回一堆数据的服务器。一旦我获得数据,我必须对其执行一些工作,这是相当昂贵的,而且我宁愿在 bg 线程中执行这些工作以防止 UI 锁定。最后,当接收和处理来自服务器的响应时,我还需要动态地进行适当的更新。

我的问题是,当数据到达时,我将如何在后台线程中完成这项工作,以便表不会等到所有数据加载完毕后再更新?

这是我迄今为止的伪代码。在我的 ViewController 中,我将有两个 BOOL 标志 newDataReceived 和 dataFinishedDownloading。我还有两个变量,一个包含当前数据的字符串和一个保存数据处理结果的 nsarray。那么,

  1. 在 didReceiveResponse: 中,我将通过调用 PerformSelectorInBackground: 并使用处理方法作为选择器来生成一个新线程。
  2. 在该方法中,我将有一个循环,首先检查 newDataReceived 以查看新数据是否已到达,如果是,则对其进行一些处理。
  3. 完成处理后,我将使用结果设置 nsarray,然后调用另一个方法来更新表数据源并使用 PerformSelectorOnMainThread 重新加载表:
  4. 最后我会检查 dataFinishedLoading 标志以查看是否还有更多数据需要处理
  5. 如果仍有数据,则重新开始,否则清理线程并退出

newDataReceived 标志也将在 didReceiveData: 以及接收到的实际数据中设置。最后在 didFinishLoading 中,我将设置 dataFinishedLoading 标志来表示所有数据已加载。

我计划在检查状态标志以及获取和设置接收到的数据字符串和结果 nsarray 时使用 #2-4 中的 NSLock。

我确信有很多方法可以做同样的事情,但这看起来是一个好方法吗?

谢谢

最佳答案

你可以看看 NSOperation 和 NSOperationQueue。 NSOperation 是在后台进行繁重计算和操作的完美替代方案。如果您需要不断更新表格 View ,您可以在操作中实现一些协议(protocol)来处理对表格 View 的回调。

关于iphone - 如何在更新 UITableView 时在后台线程中执行网络任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4951978/

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