gpt4 book ai didi

iphone - ScrollView内容异步下载问题

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

我有 UIScrollView 里面有很多 UIImageView 。在 loadView 方法中,我为每个 subview UIImageView 图像分配一些临时图像,并启动多个线程从互联网异步下载图像。每个线程下载并分配图像如下:

    NSData  *data   = [NSData dataWithContentsOfURL:URL];
UIImage *img = [UIImage imageWithData:data];
img_view.image = img;

问题是 - 我预计在下载每个图像后图片会发生变化,我只能看到临时图像,直到所有图像都下载完毕。 UIScrollView 在图像下载时仍然进行交互 - 我可以在其中滚动临时图像并看到滚动条并且没有任何东西阻止运行循环,但下载的图像不会更新..

我尝试做的事情:

  1. 在下载线程中调用 sleep() ——没有帮助。
  2. 为 ScrollView 内的每个 ImageView 以及 ScrollView 调用 setNeedsDisplay ——没有帮助。

怎么了?谢谢。

更新。我尝试了一些关于线程数和要下载的图像数的实验。现在我确信——图像仅在线程完成时才会重绘。例如 - 如果我用一个线程加载 100 张图像 - 所有图像下载后图片会更新一次。如果我将线程数增加到 10——图片更新 10 次——每次更新会出现 10 个图像。

还有一个更新。我通过每次下载一张图像时从下载线程启动新线程并退出当前线程(而不是在循环中的一个线程中下载多个图像并仅在全部下载时退出线程)来解决问题。显然这不是一个好的解决方案,必须有正确的方法。

最佳答案

我不鼓励使用线程来实现此用途,并使用异步 API 进行网络上的数据检索。

NSData  *data   = [NSData dataWithContentsOfURL:URL];

此函数调用从套接字发送一些数据,然后驻留在该处并锁定线程,直到收到响应。如果您不进行任何同步调用,您就不必太担心锁定 UI 线程,并且您的问题会变得简单得多。

我会使用ASIHTTP图书馆或NSURLConnection访问您的数据,并在一个线程上完成所有更新。 API 的学习曲线有一点点困难,但它比正确管理线程要小。我强烈推荐 ASIHTTP 库,它非常棒。您可以将请求委托(delegate)设置为进度小部件并限制边缘使用的连接。

关于iphone - ScrollView内容异步下载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2719731/

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