我正在创建一个Keyboard Extensions,它显示动画 GIF 图像,一次它只显示分布在 20 个 GIF 中的最大 2MB 图像。
每当加载 GIF 时,内存消耗会增加超过 8MB,这会导致Memory Pressure,并且一旦加载键盘就会终止。
我SDWebImage
用来展示GIF。
谁能建议我,我应该如何使用 GIF,或者在键盘扩展中显示动画 GIF 是个好主意?为什么扩展占用这么多内存?
谢谢你。
我正在创建一个Keyboard Extensions,它显示动画 GIF 图像,一次它只显示分布在 20 个 GIF 中的最大 2MB 图像。
每当加载 GIF 时,内存消耗会增加超过 8MB,这会导致Memory Pressure,并且一旦加载键盘就会终止。
我SDWebImage
用来展示GIF。
谁能建议我,我应该如何使用 GIF,或者在键盘扩展中显示动画 GIF 是个好主意?为什么扩展占用这么多内存?
谢谢你。
SDWebImage 有很多特性,所以对象会很重。尝试使用 FLAnimatedImage。它专门用于显示 GIF
尝试将FLAnimatedImage与Nuke一起使用,它会自动为您集成 FLAnimatedImage。FLAnimatedImage 是目前最好的 iOS 动画 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 按需创建位图并智能缓存它们。
当 GIF 被加载时,它们将被解压缩,因此它们将占用更多的内存空间。这是因为 iOS 需要原始位图格式的图像才能编辑或显示它们。
GIF 格式的压缩比非常好,但色彩空间只有 8bpp。因此,在您的情况下很有可能进行 4 倍压缩。