简单的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类也会被正确清理
- 为什么Objective-C / Swift中的asynchronousnetworkingtesting困难?
- 如何在Swift中完成外部asynchronous请求之前先完成内部asynchronous请求?
- sendAsynchronousRequest使UI冻结
- 使用dispatch_async或performSelectorOnMainThread在主线程上执行UI更改?
- 如果方法使用NSURLConnection如何返回输出与块的asynchronous调用
- 与NSURLSessionasynchronous上传将无法正常工作,但同步NSURLConnection不会
- 如何正确使用完成处理程序
- 在iOS中的UITableViewasynchronous图像加载的build议
- 如何在iOS中asynchronous下载多个图像,而不影响UI?