使用 SDWebImage 下载大图像时应用程序崩溃?

App crash while downloading large images using SDWebImage?

我正在使用 SDWebImage 从服务器上的 server.Some 异步下载图像大小约为 1.5 到 2。MB.I 在 [=13= 上显示这些图像].几次 run.Some 次后,我收到内存警告和应用程序崩溃,这是在第一次下载图像时发生的,有时是在我上下滚动集合视图时发生的。 这是我的代码-

-(void)setImageWithUrl:(NSURL*)imgurl onImageView:(UIImageView*)image prograssive:(BOOL)progressive
{
    __block UIActivityIndicatorView *activityIndicator;
    __weak UIImageView *weakImageView = image;
    SDWebImageOptions opt;
    if (progressive) {

        opt = SDWebImageProgressiveDownload;
    }
    else
        opt = SDWebImageRetryFailed;
    [image sd_setImageWithURL:imgurl placeholderImage:[UIImage imageNamed:@"default_image"] options:opt progress:^(NSInteger receivedSize, NSInteger expectedSize)
     {
         if (!activityIndicator)
         {
             [weakImageView addSubview:activityIndicator = [UIActivityIndicatorView.alloc initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]];
             activityIndicator.center = CGPointMake(weakImageView.frame.size.width /2, weakImageView.frame.size.height/2);
             // activityIndicator.center = weakImageView.center;
             [activityIndicator setBackgroundColor:[UIColor clearColor]];
             [activityIndicator startAnimating];
         }
     }
                    completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL)
     {
         [activityIndicator removeFromSuperview];
         activityIndicator = nil;
     }];
}

并在 AppDelegate-

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{

    [[SDImageCache sharedImageCache] clearMemory];
    [[SDImageCache sharedImageCache] cleanDisk];
    [[SDImageCache sharedImageCache] clearDisk];
    [[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"];
}

请不要使用高分辨率的图像(超过 3000 像素宽度)。例如,其中一张具有 4256*2832 和大小 979KB 产生内存 warning.Any 帮助或建议将不胜感激。 编辑:- 我的应用程序由于内存压力而被终止,但仅限于 iPhone 4s 和更低版本(在 iPhone5 及更高版本上工作正常)。正在下载大图像(或完整下载)我突然出现内存峰值(从 ~25mb 到 ~90mb)和应用 crashes.Any 建议做什么?

听起来您的应用程序由于内存压力而被终止。检查 Instruments where exactly the memory increases and maybe try using an Autorelease Pool 以减轻任何内存峰值。

是的,@dlinsin 完全正确。这绝对是内存问题。

希望您没有使用同一张 2mb 的图片作为缩略图。如果是,那就是你崩溃的原因。请使用较低分辨率的图像作为缩略图,并在用户要求时显示较大的图像

顺便说一句,用这个看看是否有帮助。

[[SDImageCache sharedImageCache] setShouldDecompressImages:NO]; [[SDWebImageDownloader sharedDownloader] setShouldDecompressImages:NO];