简易异步图像下载UIImage视图

时间:2012-05-16 10:06:28

标签: ios ios5 asynchronous uiimageview

我有一个应用程序,我正在构建它工作正常,但我使用的图像源来自一个网站,当我切换回我的初始视图,它需要相当长的时间来加载。我的问题是,有没有办法完成这项工作,速度更快。 这是我用来拉动图像源的代码

////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"]]];

任何帮助或推动正确的方向。很快,每一天的形象都会发生变化,所以对此的任何帮助/想法都会非常值得赞赏。

2 个答案:

答案 0 :(得分:2)

这里的问题是dataWithContentsOfURL:在主线程上,因此在下载图像时会阻止你的用户界面。

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

答案 1 :(得分:1)

将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类