gpt4 book ai didi

ios - 使用 SDWebImage 加载大 gif 导致 iOS 应用程序因内存错误而崩溃

转载 作者:行者123 更新时间:2023-12-01 17:32:16 26 4
gpt4 key购买 nike

我正在使用 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
}
}];

当图像格式为jpgpng时,它显示得很好,甚至是一些正常大小的gif。但是当有一个大的 gif 时,就会导致崩溃,XCode 会给出这样的错误:

Message from debugger: Terminated due to Memory Error

更新:每次导致崩溃的gif图像是299px*299px570KB 大。对于那些有兴趣查看 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 (我的),PINRemoteImage 、FLAnimatedImage_AFNetworking等。或者直接使用FLAnimatedImage。

关于ios - 使用 SDWebImage 加载大 gif 导致 iOS 应用程序因内存错误而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32173846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com