[英]Loading a big gif with SDWebImage caused iOS app crash with memory error
我正在使用SDWebImage框架从UIScrollView
上的UIImageView
从互联网返回的URL获取全屏图像,如下所示:
[imageView sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:[UIImage imageNamed:@"placeholder"] options:SDWebImageCacheMemoryOnly completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
if (!error) {
//added as subview
} else {
//show error
}
}];
当图像的格式为jpg
或png
,它可以很好地显示,甚至是一些正常大小的gif
。 但是当有一个大gif
,它将导致崩溃,并且XCode给出了这样的错误:
Message from debugger: Terminated due to Memory Error
更新:每次都会导致崩溃的gif
图像为299px
* 299px
和570KB
大。 对于那些有兴趣查看gif的人,链接是:
http://ww4.sinaimg.cn/large/604e48d0jw1evcn03adjjg208b08bdv0.gif
每次单击预览缩略图时,我都可以重新创建它。 我该如何解决? 使用什么工具观察根本原因? 我进行了一些研究,我想这是否是由于我使用了以下选项导致的: SDWebImageCacheMemoryOnly
,而大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可按需创建位图并智能地对其进行缓存。
看看FLAnimatedImage 。 以及使用它进行GIF播放的图像加载器,例如Nuke (我的), PNRemoteImage ,FLAnimatedImage_AFNetworking等。或者直接使用FLAnimatedImage。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.