Ios 轻松异步图像下载UIImage视图

Ios 轻松异步图像下载UIImage视图,ios,ios5,asynchronous,uiimageview,Ios,Ios5,Asynchronous,Uiimageview,我有一个应用程序,我正在建设它工作正常,但我使用的图像源是从一个网站,当我切换回我的初始视图,它需要相当长的时间来加载。我的问题是,有没有办法做到这一点,让速度更快。 下面是我用来提取图像源代码的代码 ////Loads UIImageView from URL todaysWallpaper.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.inkdrye

我有一个应用程序,我正在建设它工作正常,但我使用的图像源是从一个网站,当我切换回我的初始视图,它需要相当长的时间来加载。我的问题是,有没有办法做到这一点,让速度更快。 下面是我用来提取图像源代码的代码

////Loads UIImageView from URL
todaysWallpaper.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.inkdryercreative.com/daily/archive/mondays/images/062-mondays-960x640-A.jpg"]]];

向正确方向的任何帮助或推动。很快,图像每天都会发生变化,因此对此的任何帮助/想法都将非常感谢

这里的问题是
dataWithContentsOfURL:
在主线程上,因此在下载图像时它会阻止您的UI


您必须异步下载它。为此,我个人使用了我在互联网上找到的一段很棒的代码:。它完全符合您的要求。

将UIImage创建包装在一个异步运行的块中(代码假定为ARC),然后在主线程中调用您的回调

@implementation Foo
...
Foo* __weak weakSelf=self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:
                   [NSURL  URLWithString:@"http://www.inkdryercreative.com/..jpg"]]];
    dispatch_sync(dispatch_get_main_queue(),^ {
        //run in main thread
       [weakSelf handleDelayedImage:image];
    });
});

-(void)handleDelayedImage:(UIImage*)image
{
   todaysWallpaper.image=image;
}

weakSelf技巧确保即使URL请求仍在运行,也能正确清理Foo类

将所有文件添加到项目中。然后导入类别“UIImageView+WebCache.h”。之后,您可以执行[myImageView setImageWithURL:myURL];你好,只是按照你的建议做了,但没用。它构建并运行良好,但没有图像显示。我错过什么了吗?是的,应该错过。你确定你的URL是好的吗?(顺便说一句,当一个url失败一次时,它会被保存并且不会再次获取,我在我的源代码中删除了此功能)如果有人需要调整大小/剪切功能,我将此库与UIImage+调整大小库集成。请在中查看