4

ImageviewでURL画像を直接開きますが、将来の参照用に画像をキャッシュメモリに保存したいのですが...問題を解決するのに役立ちます。

前もって感謝します

4

3 に答える 3

5

画像キャッシュを使用するSDWebImageを使用できます...

このライブラリはUIImageVIew、Webからのリモートイメージをサポートするためのカテゴリを提供します。

それは提供します:

UIImageViewCocoaTouchフレームワークにWeb画像とキャッシュ管理を追加するカテゴリ

非同期画像ダウンローダー

自動キャッシュ有効期限処理を備えた非同期メモリ+ディスクイメージキャッシング

背景画像の解凍

同じURLが複数回ダウンロードされないことの保証

偽のURLが何度も再試行されないことの保証

メインスレッドがブロックされないことの保証

公演!GCDとARCを使用する

于 2013-03-08T10:39:18.653 に答える
0

これはiOS開発の古典的な問題です。以前、NSOperationQueueを使用するOnlineImageViewクラスを作成しましたが、GCDの方が優れている可能性があります。

オンライン画像にアクセスしたい:

  1. まず、メモリキャッシュ内の画像(キー、おそらくURLを使用)をヒットしようとしましたが、失敗しました。
  2. 次に、ディスク内の画像を見つけようとしますが、もう一度見逃しました。
  3. 次に、GCDまたはその他の方法を使用して、オンラインイメージを非同期でダウンロードする必要があります。
  4. 画像が正常にダウンロードされたら、UIImageViewに表示し、メモリにキャッシュして、後で使用できるようにディスクに書き込みます。

いくつかのサンプルコード:

- (void)downloadImage:(NSDictionary *)info
{
    /* HOWTO: Prevent Downloading the same url many times */
    /* Keep the download task one by one ? */

    NSString *url = [info objectForKey:@"url"];
    NSURL *imageUrl = [NSURL URLWithString:url];
    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageUrl]];

    if (image) {
        id theDelegate = [info objectForKey:@"delegate"];
        if ([theDelegate respondsToSelector:@selector(imageDownloader:didFinishWithImage:)]) {
            [theDelegate imageDownloader:self didFinishWithImage:image];
        }

        [cacheQueue cacheImage:image withKey:url];
    } else {
#ifdef DEBUG
        NSLog(@"Failed to download : %@\n", url);
#endif
    }
}
于 2013-03-08T10:57:14.407 に答える
0

SDWebImageを使用します。画像データのキャッシュに最適で簡単です。

于 2013-03-08T11:18:51.193 に答える