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

画像のキャッシュには、dispatch_async の代わりにSDWebImageを使用します。

これは私が見た中で最高です...

dispatch_async の問題は、画像からフォーカスを失った場合、再度読み込まれることです。ただし、SDWebImage はイメージをキャッシュし、再度リロードしません。

于 2013-08-29T09:25:06.323 に答える
1

私自身の質問で私に与えられた答えGCD ブロック内の [NSData dataWithContentsOfURL:URL] の動作を理解することは理にかなっています。したがって、GCD 内で使用する場合[NSData dataWithContentsOfURL:URL](最近多くの開発者が行っているように) は良い考えではないことを確認してください。ファイル/画像をダウンロードします。だから私は以下のアプローチに傾いています(どちらも使用できます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 に答える
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 に答える