gpt4 book ai didi

ios - 为什么我的后台工作线程阻塞了 UI 线程?

转载 作者:行者123 更新时间:2023-11-28 17:33:38 25 4
gpt4 key购买 nike

我正在开发一个应用程序,它将 native 联系人上传到服务器然后获取响应(JSON,已安装该应用程序的联系人列表)。当 native 联系人足够大时,服务器响应会变慢且不稳定。用户不能做其他事情。所以我将网络请求放入后台线程。每次我都会上传 100 个联系人,执行一些任务,然后再上传 100 个联系人,直到循环结束。

但是在运行中,结果并不如预期。后台线程正在运行,它不断地请求服务器。 UI 线程被阻塞,我仍然无法做任何事情。

这会导致后台线程中出现长循环吗?虽然我有2个线程,但它们会竞争CPU资源(测试设备是iPod,1核。我认为这可能与核数无关)?

谁能告诉我如何处理这种情况的提示?提前致谢!

更新:

我找到了根本原因。 App delegate 中的全局变量设置为错误值,因此 UI 行为很奇怪。我通过评论所有网络请求方法找到了这个。所以这个问题与多线程无关。抱歉打扰了。

最佳答案

我认为需要澄清一下您是如何执行网络操作的。

第一,NSOperatiomQueue 处理 NSOperations,因此您可能将网络代码包装在 NSOperation 子类中。

第二,你的网络代码是否使用了 NSURLConnections?

第三,阻塞部分是 NSURLConnection 还是您委托(delegate) NSURLConnection 的回调?

需要注意的一件事是普通 ol' NSURLConnections 是在多线程的引擎盖下实现的。该对象默认放置在您的主线程运行循环中(当从主线程运行时),但该对象只是一个包装器,用于处理从发生在另一个线程上的较低级别网络代码(BSD 套接字)到委托(delegate)的回调。

你真的不应该在主线程上用 NSURLConnections 阻塞你的 UI,除非 A)你在委托(delegate)回调方法中用昂贵的代码阻塞了线程,或者 B)你用太多的同步来压倒你的运行循环URL 连接(这是 NSOperationQueue 的 setMaxConcurrentOperationsCount: 发挥作用的地方)

关于ios - 为什么我的后台工作线程阻塞了 UI 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10468226/

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