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