-1

我想知道如何在不延迟用户的情况下加载图像。

在视图出现并显示所有用户信息后,我一直在尝试从 url 加载图像,因此当用户单击按钮时,视图会立即显示。

谢谢

4

2 回答 2

0

使用 NSURLConnection 进行下载:

NSURLRequest* req = [NSURLRequest requestWithURL:url];
NSOperationQueue* q = [NSOperationQueue mainQueue];
[NSURLConnection sendAsynchronousRequest:req queue:q
   completionHandler:^(NSURLResponse *resp, NSData *d, NSError *err) {
       if (d) {
           UIImage* im = [UIImage imageWithData:d];
           // do something with the image
       }
   }];

下载发生在后台线程上,因此不会延迟用户并且(最重要的是)不会阻塞主线程;但是一旦下载完成,完成处理程序就会发生在主线程上,因此现在可以安全地将图像粘贴到您的界面或为其设置属性或其他任何东西。

于 2013-05-13T01:26:48.047 回答
0

您想出的几乎所有解决方案都需要异步加载图像(即在后台)。我建议您在从 JSON 中获取 URL 后立即启动一个后台线程来加载图像,这样当用户单击按钮以显示它时它就准备好了。

我还建议做一些缓存,所以以前下载的图像已经“在磁盘上”,不需要通过网络来显示。

这是我做的一个示例项目,它显示了如何从 URL 加载(和缓存)图像。它不是 JSON,但它可能会帮助你。

于 2013-05-13T01:18:41.163 回答