gpt4 book ai didi

ios - UITableView如何操作队列并发下载

转载 作者:行者123 更新时间:2023-11-29 11:02:18 24 4
gpt4 key购买 nike

我正在做一个 UITableview 来下载数据webservice 这个名字非常快,所以我最初用它来填充表,然后我为图像启动一个操作队列。

然后为其余数据创建一个单独的队列,因为它加载速度非常慢,但会影响图像加载时间,我如何同时执行这两个操作。

你能找出是什么降低了那里的性能并帮助我修复它吗?

最佳答案

我假设您知道,您可以通过设置 maxConcurrentOperationCount 来指定并发请求的数量。当您创建队列时。四是典型值。

self.imageDownloadingQueue.maxConcurrentOperationCount = 4;

问题是,您不能比这大得多(由于 iOS 限制和某些服务器限制)。可能是 5 个,但不会超过那个。

就个人而言,我不会用完返回文本值的最大并发操作的有限数量。我会预先检索所有这些。您延迟加载图像是因为它们太大,但文本条目太小以至于执行单独的网络请求的开销开始强加其自身的性能损失。如果您打算对描述进行延迟加载,我会以 50 或 100 个左右的批处理下载它们。

查看您的源代码,至少,您发出的 JSON 请求是应有的两倍(您在 getAnimalRankgetAnimalType 中检索相同的 JSON)。但是您真的应该只更改初始 JSON 请求以返回您需要的所有内容,名称、等级、类型、URL(但不是图像本身)。然后在一次调用中,您将获得所需的一切(除了图像,我们将异步检索这些图像,并且您的服务器为用户体验提供的速度非常快)。如果您决定保留对排名/类型/网址的个别请求,您需要查看您的服务器代码,因为没有正当理由不应该立即返回,而且它目前非常慢。但是,正如我所说,您真的应该只在初始 JSON 请求中返回所有这些内容,这样您的用户界面就会快得多。

最后一点:您正在为详细信息和图像下载使用单独的队列。使用 NSOperationQueue 的全部目的和设置 maxConcurrentOperationCount是 iOS 只能使用给定服务器执行 5 个并发请求。通过将它们放在两个单独的队列中,您将失去 maxConcurrentOperationCount 的好处。 .事实证明,请求超时需要一分钟时间,因此您可能不会遇到问题,但这仍然反射(reflect)了对队列用途的基本误解。

最重要的是,您应该只有一个网络队列(因为系统限制是您的设备和任何给定服务器之间有多少网络并发连接,而​​不是多少图像下载以及多少描述下载)。

关于ios - UITableView如何操作队列并发下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15310701/

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