JMImageCacheForkAntoine 0.0.1

JMImageCacheForkAntoine 0.0.1

测试已测试
语言语言 Objective CObjective C
许可证 MIT
发布最新发布2016年11月

未指定的用户维护。



  • Antoine Rabanes 和 Jake Marsh

JMImageCache

简介

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 的标准方法的好主意。

添加到您的项目中

ARC(自动引用计数)

JMImageCache 使用 自动引用计数(ARC)。如果您的项目没有使用 ARC,您需要将所有 JMImageCache 源文件上的编译器标志设置为 -fobjc-arc。在 Xcode 中进行此设置,请转到您的活动目标并选择“构建过程”标签。在“编译器标志”列中,为每个 JMImageCache 源文件设置 -fobjc-arc