Haneke 1.0.2

Haneke 1.0.2

测试测试过
Lang语言 Obj-CObjective C
许可 Apache 2
发布最后发布2016年1月

Hermes Pique 维护。



Haneke 1.0.2

一个轻量级的零配置 iOS 图片缓存,用 Objective-C 编写。还有一个 Swift 版本。

Haneke 可以调整图片大小并缓存结果在内存和磁盘上。所有操作都在后台完成,允许快速响应的滚动。要求 Haneke 加载、调整大小、缓存和显示一个大小合适的图片就像这样

[imageView hnk_setImageFromURL:url];

真的

特点

  • 使用 NSCache 的一级内存缓存。
  • 二级 LRU 磁盘缓存,使用文件系统。
  • 零配置的 UIImageView 分类来使用缓存,针对 UITableViewUICollectionView 细胞重用进行了优化。
  • 异步和同步的图片检索。
  • 后台图片调整大小和文件读取。
  • 图片解压缩。
  • 在调整大小前后对图片进行自定义转换。
  • 线程安全。
  • 在内存警告或在磁盘容量达到时自动清除缓存。
  • 在启动时从磁盘缓存中预先加载图片到内存。

安装

使用 CocoaPods

pod 'Haneke', '~> 1.0'

或者,您可以直接将 Haneke 目录中的文件添加到您的项目中。

UIImageView 分类

Haneke 为 UIImageView 提供方便的方法,并针对 UITableViewUICollectionView 细胞重用进行了优化。图片会根据需要调整大小,并在共享缓存中缓存。

// Setting a remote image
[imageView hnk_setImageFromURL:url];

// Setting a local image
[imageView hnk_setImageFromFile:path];

// Setting an image manually. Requires you to provide a key.
[imageView hnk_setImage:image withKey:key];

上面的代码行负责

  1. 如果已缓存,从内存或磁盘缓存检索一个大小合适的图片(根据 UIImageViewboundscontentMode),磁盘访问在后台进行。
  2. 如果没有缓存,从网络/磁盘/内存加载原始图片,并产生一个大小合适的图片,两个操作都在后台进行。如果可用,远程图片将从共享的 NSURLCache 中检索。
  3. 如果适当,设置图片并动画变化。
  4. 或者,如果以上任一步骤中 UIImageView 被重用,不做任何事情。
  5. 缓存生成的图片。
  6. 如果需要,清除缓存中最少使用过的图片。

缓存格式

通过定义缓存格式来定制缓存行为。每个图像视图都有一个默认格式,您也可以定义自己的格式。格式可以通过其名称唯一标识。

UIImageView 格式

每个图像视图都会在需要时创建一个默认格式。默认格式配置如下:

  • 尺寸与图像视图的 bounds 相匹配。
  • 图像会根据图像视图的 contentMode 进行缩放。
  • 如果图像比图像视图小,则可以对其进行放大。
  • 高压缩质量。
  • 不预加载。
  • 磁盘缓存最高可达 10MB。

不建议修改默认格式。相反,可以像这样设置自己的自定义格式:

HNKCacheFormat *format = [HNKCache sharedCache].formats[@"thumbnail"];
if (!format)
{
    format = [[HNKCacheFormat alloc] initWithName:@"thumbnail"];
    format.size = CGSizeMake(320, 240);
    format.scaleMode = HNKScaleModeAspectFill;
    format.compressionQuality = 0.5;
    format.diskCapacity = 1 * 1024 * 1024; // 1MB
    format.preloadPolicy = HNKPreloadPolicyLastSession;
}
imageView.hnk_cacheFormat = format;

要将相同的自定义格式应用于各种图像视图,必须使用相同的格式实例。上面的示例通过仅在自定义格式尚未在共享缓存中注册时初始化来自定义格式来实现这一点。在最后一行中,图像视图类别会处理在必要时将格式注册到共享缓存中。

磁盘缓存

可以通过将 diskCapacity 属性设置为大于 0 的值来为格式设置磁盘缓存。当磁盘容量超过时,Haneke 将负责从磁盘缓存中逐出格式中最近最少使用的图像。

预加载策略

在注册格式时,Haneke 将根据格式的预加载策略将磁盘上缓存的图像加载到内存缓存中(无、一些或全部)。可用的预加载策略包括:

  • HNKPreloadPolicyNone:不会预加载图像。
  • HNKPreloadPolicyLastSession:仅预加载上一次会话中的图像。
  • HNKPreloadPolicyAll:预加载所有图像。

如果预加载完成之前就请求对应格式的图像,Haneke 将取消预加载以给请求优先级。为了保证这一功能的最大性能,建议在启动时注册格式。预加载仅适用于具有磁盘缓存的格式。

预加载仅适用于具有磁盘缓存的格式。

预缩放和后缩放代码块

格式可以有自己的代码块,在原始图像缩放前后调用:分别叫做 preResizeBlockpostResizeBlock。两者都接收一个键和对应的图像。例如:

format.postResizeBlock = ^UIImage* (NSString *key, UIImage *image) {
    UIImage *roundedImage = [image imageByRoundingCorners];
    return roundedImage;
};

这些代码块只有在请求的图像不在缓存中时才会调用。当使用图像视图类别或直接使用缓存的异步方法时,它们将在后台执行。

日志记录

Haneke 提供了有用的日志记录,默认是 关闭 的。您可以在演示中看到其效果。

要打开日志记录,必须将预处理器宏 HANEKE_DEBUG 设置为 1。推荐的做法是将 HANEKE_DEBUG=1 添加到 预处理器宏 编译设置中。如果您直接包含 Haneke,将其添加到您的项目目标中。如果您使用 CocoaPods,将其添加到 Pods 项目中的 Pods-Haneke 目标。

要求

Haneke 需要 iOS 7.0 或更高版本和 ARC。

通过非常少的 更改 可以实现与 iOS 6 的兼容性。您可以使用 @shkutkov分支,该分支通过用 AFNetworking 替换 NSURLSession 来实现这一点。

许可协议

版权所有 2014 Hermes Pique (@hpique)

遵循Apache许可证2.0版本(以下简称“许可证”);除非遵守许可证规定,否则不得使用此文件。您可以在以下地址获取许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用的法律要求或书面同意,否则在许可证下分发的软件是按“原样”提供的,不提供任何形式的明示或暗示的保证。具体的权限和限制请参阅许可证。