JMImageCache 0.4.0

JMImageCache 0.4.0

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
Release上次发布2014年12月

Jake Marsh 维护。



  • Jake Marsh

简介

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