简单的asynchronous图像下载UIImage视图

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

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

你必须asynchronous下载它。 为此,我亲自使用了我在网上find的一大段代码: SDWebImage 。 它正是你想要的。

将UIImage创build包装在asynchronous运行的代码块中(代码假定为ARC),然后在主线程中调用您的callback函数

 @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类也会被正确清理