1

我正在创建一个Keyboard Extensions,它显示动画 GIF 图像,一次它只显示分布在 20 个 GIF 中的最大 2MB 图像。

每当加载 GIF 时,内存消耗会增加超过 8MB,这会导致Memory Pressure,并且一旦加载键盘就会终止。

SDWebImage用来展示GIF。

谁能建议我,我应该如何使用 GIF,或者在键盘扩展中显示动画 GIF 是个好主意?为什么扩展占用这么多内存?

谢谢你。

4

3 回答 3

3

SDWebImage 有很多特性,所以对象会很重。尝试使用 FLAnimatedImage。它专门用于显示 GIF

于 2015-09-14T07:50:50.710 回答
1

尝试将FLAnimatedImageNuke一起使用,它会自动为您集成 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 按需创建位图并智能缓存它们。

于 2015-09-14T08:53:14.363 回答
0

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

GIF 格式的压缩比非常好,但色彩空间只有 8bpp。因此,在您的情况下很有可能进行 4 倍压缩。

于 2015-09-14T08:00:42.097 回答