我正在使用此代码将图像从URL显示到UIImageview
UIImageView *myview=[[UIImageView alloc]init];
myview.frame = CGRectMake(50, 50, 320, 480);
NSURL *imgURL=[[NSURL alloc]initWithString:@"http://soccerlens.com/files/2011/03/chelsea-1112-home.png"];
NSData *imgdata=[[NSData alloc]initWithContentsOfURL:imgURL];
UIImage *image=[[UIImage alloc]initWithData:imgdata];
myview.image=image;
[self.view addSubview:myview];
但问题是它需要花费太长时间才能在imageview中显示图像。
请帮帮我......
有没有办法加快这个过程......
答案 0 :(得分:2)
使用SDWebImage缓存图像,而不是dispatch_async。
这是我见过的最好的......
dispatch_async的问题在于,如果您从图像中失去焦点,它将再次加载。但是SDWebImage,缓存图像,它不会再次重新加载。
答案 1 :(得分:1)
Use Dispatch queue to load image from URL.
dispatch_async(dispatch_get_main_queue(), ^{
});
Or add a placeholder image till your image gets load from URL.
答案 2 :(得分:1)
根据我自己的问题给出的答案 Understanding the behaviour of [NSData dataWithContentsOfURL:URL] inside the GCD block 确实有意义。如果你在GCD中使用[NSData dataWithContentsOfURL:URL]
(这些天很多开发人员都这么做) )下载文件/图像不是一个好主意。所以我倾向于以下方法(你可以使用NSOperationQueue
)。
使用[NSURLConnection sendAsynchronousRequest:queue:completionHandler:
加载图像,然后使用NSCache阻止一次又一次地下载相同的图像。
正如许多开发人员所建议的那样,请选择 SDWebimage ,它确实包含了下载图像文件的上述策略。您可以加载所需数量的图片,而且相同的网址不会根据代码的作者
下载几次编辑:
[NSURLConnection sendAsynchronousRequest:queue:completionHandler:
NSURL *url = [NSURL URLWithString:@"your_URL"];
NSURLRequest *myUrlRequest = [NSURLRequest requestWithURL:url];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:myUrlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
if ([data length] > 0 && error == nil)
//doSomething With The data
else if (error != nil && error.code == ERROR_CODE_TIMEOUT)
//time out error
else if (error != nil)
//download error
}];