4

我直接在 Imageview 中打开 URL 图像,但我想将图像存储在缓存中以供将来参考...帮助我解决我的问题..

提前致谢

4

3 回答 3

5

您可以使用使用图像缓存的 SDWebImage ...

该库提供了一个类别UIImageVIew,支持来自网络的远程图像。

它提供:

向 Cocoa Touch 框架添加 Web 图像和缓存管理的UIImageView类别

一个异步图片下载器

具有自动缓存过期处理的异步内存 + 磁盘映像缓存

背景图片解压

保证不会多次下载相同的 URL

保证不会一次又一次地重试虚假 URL

保证主线程永远不会被阻塞

表演!使用 GCD 和 ARC

于 2013-03-08T10:39:18.653 回答
0

这是iOS开发中的一个经典问题,我之前写了一个类OnlineImageView,它使用的是NSOperationQueue——现在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 回答