花时间将图像从URL加载到UIImageview

时间:2013-08-29 09:13:54

标签: iphone ios objective-c path uiimageview

我正在使用此代码将图像从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中显示图像。

请帮帮我......

有没有办法加快这个过程......

3 个答案:

答案 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
}];