简单的异步图像下载UIImage视图



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

////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。

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

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;
}

弱自我技巧确保即使 URL 请求仍在运行,您的 Foo 类也得到正确清理

最新更新