我正在创建一个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 倍压缩。