ibireme/YYImage

YYAnimatedImageView没有缓存webp第0帧图片问题

paulmanwang opened this issue · 0 comments

根据webp data创建YYImage:

  • (instancetype)initWithData:(NSData *)data scale:(CGFloat)scale,

会构建解码器并解码第0帧图片。
然后将YYImage设置给YYAnimatedImageView,此时并没有将解码的第0帧图片缓存到_buffer字典中,导致后续会再一次解码第0帧图片。

这样一方面会造成多余的cpu资源消耗;另一方面在使用instruments查看内存占用时,发现会多出一帧图片的内存占用,比如webp的总帧数为10,单帧解码后大小为1M,理论上占用内存为10M,但是instruments显示的内存占用总的帧数为11,总的内存大小为11M。

我尝试将第0帧缓存到_buffer字典中:

  • (void)setImage:(UIImage *)image {
    if (self.image == image) return;
    [self setImage:image withType:YYAnimatedImageTypeImage];
    // 缓存第一帧图片
    if (_buffer) {
    _buffer[@(0)] = image;
    }
    }

测试发现第0帧图片不会去重复解码,内存占用也变为正常的10M。

望解答讨论,感谢~