2 MB 的 GIF 图片占用 8 MB 内存

2 MB of GIF images consuming 8 MB of memory

我正在创建一个 键盘扩展,它显示动画 GIF 图像,一次它只显示最多 2MB 的图像,分布在 20 个 GIF 中。

每当加载 GIF 时,内存消耗都会增加 8MB 以上,这会导致 内存压力,并且键盘一加载就终止。

我正在使用 SDWebImage 来显示 GIF。

任何人都可以建议我,我应该如何使用 GIF,或者在键盘扩展中显示动画 GIF 是个好主意吗?为什么扩展程序占用这么多内存?

谢谢。

SDWebImage 有很多功能所以对象会很重。尝试使用 FLAnimatedImage。专为展示 GIF 而制作

加载 GIF 时,它们将被解压缩,因此它们会占用更多 space 内存。这是因为 iOS 需要原始位图格式的图像才能编辑或显示它们。

GIF 格式具有非常好的压缩比,但只有 8bpp 颜色的限制 space。因此,您的情况很可能是 4 倍压缩。

尝试使用FLAnimatedImage with Nuke,它会自动为您集成FLAnimatedImage。 FLAnimatedImage 是目前 iOS class 动画 GIF 引擎中最好的。

SDWebImage 的问题在于它们有自己的 GIF 动画实现。他们遍历所有帧并预先创建位图:

for (size_t i = 0; i < count; i++) {
    CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL);
    duration += [self sd_frameDurationAtIndex:i source:source];
    [images addObject:[UIImage imageWithCGImage:image scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]];
    CGImageRelease(image);
}

另一方面,FLAnimatedImage 按需创建位图并智能地缓存它们。