1

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

请帮我...

有什么方法可以加快这个过程...

4

3 回答 3

2

使用SDWebImage代替 dispatch_async缓存图像。

这是我见过的最好的...

dispatch_async 的问题是,如果您从图像中失去焦点,它将再次加载。但是 SDWebImage,缓存图像,它不会再次重新加载。

于 2013-08-29T09:25:06.323 回答
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.
于 2013-08-29T09:18:22.903 回答
1

在我自己的问题上给我的答案理解 GCD 块内 [NSData dataWithContentsOfURL:URL] 的行为确实是有道理的。所以请确保如果你[NSData dataWithContentsOfURL:URL]在 GCD 内使用(就像现在许多开发人员所做的那样)不是一个好主意下载文件/图像。所以我倾向于下面的方法(你可以使用NSOperationQueue)。

使用加载图像[NSURLConnection sendAsynchronousRequest:queue:completionHandler:然后使用 NSCache 来防止一次又一次地下载相同的图像。

正如许多开发人员建议的那样,使用SDWebimage并且它确实包含上述​​下载图像文件的策略。您可以加载任意数量的图像,并且根据代码作者,不会多次下载相同的 URL

编辑

示例[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
}];
于 2013-08-29T09:32:43.367 回答