我使用SDWebImage
从服务器下载图像异步。服务器上的一些图像大小约为1.5到2. MB.I&#m;我在UICollectionView
上显示这些图像。我在几次运行后得到了内存警告和应用程序崩溃。有时它会在第一次下载图像时出现,有时会在我上下滚动集合视图时发生。
这是我的代码 -
-(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大小产生内存警告。任何帮助或建议将不胜感激。 编辑: - 我的应用程序因内存压力而被杀,但仅限iPhone 4s及更低版本(在iPhone5及以上版本正常工作)。当下载大图像(或完整下载)时得到突然的内存峰值(它从〜约25mb到~90mb)和应用程序崩溃。任何建议怎么做?
答案 0 :(得分:3)
听起来你的应用程序因内存压力而被杀死。检查Instruments内存增加的确切位置,并尝试使用Autorelease Pool来缓解内存峰值。
答案 1 :(得分:2)
是的,@ dlinsin是绝对正确的。这绝对是记忆问题。
我希望你没有使用相同的2mb图像作为缩略图。如果是,那就是你崩溃的原因。请将较低分辨率的图像用作拇指,并在用户要求时显示较大的图像
顺便说一下,用它来看看是否有任何帮助。
[[SDImageCache sharedImageCache] setShouldDecompressImages:NO]; [[SDWebImageDownloader sharedDownloader] setShouldDecompressImages:NO];