JMImageCache
是一个基于 NSCache
的远程图片缓存机制,用于 iOS 项目。
图片可以有三种状态
如果请求缓存中的图片,它从未被缓存,则将其下载,存储在磁盘上,放入内存,并通过代理回调返回。
如果请求缓存中的图片,它已被缓存,但尚未在此会话中请求,则从磁盘读取,带入内存,并立即返回。
如果请求缓存中的图片,它已被缓存且已经在内存中,则立即返回。
JMImageCache
的理念是始终以可能的最快方式返回图片,因此使用了内存缓存。从磁盘读取可能很昂贵,只有在必要时才应执行。
简单清洁的方法(使用 JMImageCache
添加到 UIImageView
中的类别)
[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://dundermifflin.com/i/MichaelScott.png"]
placeholder:[UIImage imageNamed:@"placeholder.png"]];
像这样请求图片
[[JMImageCache sharedCache] imageForURL:[NSURL URLWithString:@"http://dundermifflin.com/i/MichaelScott.png"] completionBlock:^(UIImage *downloadedImage) {
someImageView.image = downloadedImage;
}];
如果需要更多控制,所有方法都允许指定图片的键。这可以用来跟踪与同一 URL 关联的不同图片(例如,不同的边框半径)。这也可以用来访问在 URL 不可用的情况下可能已下载的图片。
[cell.imageView setImageWithURL:urlWhichMightBeNil
key:@"$ImageKey"
placeholder:[UIImage imageNamed:@"placeholder.png"]];
建立在 NSCache
之上的优点是JMImageCache
可以优雅地处理内存紧张的情况。当内存紧张时,它会自动清除对象,你不需要担心它。
但是,如果你真的需要,可以手动清除缓存,如下所示:
[[JMImageCache sharedCache] removeAllObjects];
如果你想从缓存中删除特定的图片,你可以这样做:
[[JMImageCache sharedCache] removeImageForURL:@"http://dundermifflin.com/i/MichaelScott.png"];
实际上,这个存储库本身就是一个演示项目。它只是一个简单的 UITableViewController
应用,加载了一些图片。没有什么特别花哨的,但它应该给你一个关于如何使用 JMImageCache
的标准用法的良好印象。
JMImageCache
使用 自动引用计数 (ARC)。如果你的项目没有使用 ARC,你需要在所有 JMImageCache
源文件上设置编译器标志 -fobjc-arc
。在 Xcode 中这样做,请转到你的活动目标并选择“构建阶段”选项卡。在“编译器标志”列中,为每个 JMImageCache
源文件设置 -fobjc-arc
。