2015-04-08 56 views
0

我通过使用SDWebImageManager从网站下载多个图像文件。 我可以下载具有像2050 x 3500这样的分辨率的文件。下面是我为同一SDWebImageManager崩溃时下载大分辨率图像文件

SomeObj *limgObj = [imageinfoArray objectAtIndex:count]; 
    __weak UIImageView *thumbImg_ = bannerImgView; 
    __weak typeof(self) weakSelf = self; 

SDWebImageManager *manager = [SDWebImageManager sharedManager]; 
manager.delegate = weakSelf; 

if([limgObj.imageUrl length] > 0) { 

[manager downloadWithURL:[NSURL URLWithString:limgObj.imageUrl] options:0 progress:^(NSUInteger receivedSize, long  long expectedSize) 
{ 
    [MMProgressHUD showWithTitle:@"" status:@"Processing.."]; 
} completed:^(UIImage *image,NSError *error, SDImageCacheType cacheType, BOOL finished) { 
    thumbImg_.image = image; 
    [MMProgressHUD dismiss]; 
}]; 
} 

如果图像的宽度或高度的代码比2000更大的是我处理它的委托方法如下

- (UIImage *)imageManager:(SDWebImageManager *)imageManager transformDownloadedImage:(UIImage *)image withURL:(NSURL *)imageURL 
{ 
    NSLog(@"ORIGINAL - > width -> %f height - >%f", image.size.width, image.size.height); 


    if (image.size.width > 2000 && image.size.width < 3000) { 
     CGSize newSize = CGSizeMake(image.size.width/1.5, image.size.height/1.5); 
     UIGraphicsBeginImageContextWithOptions(newSize, NO, 1.0); 
     [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
     UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
     NSLog(@"NEW - > width -> %f height - >%f", newImage.size.width, newImage.size.height); 
     UIGraphicsEndImageContext(); 
     return newImage; 
    }.....>Multiple cases handled for bigger images omitted to make small code here 
    return image; 
} 

提到缓存效果之前降级它不过像4961 × 7016图片这只是557kb的大小我的应用程序崩溃与内存压力警告甚至没有调用我的代理功能transformDownloadedImage并给我机会降级之前缓存。

请帮我弄清楚我在这里做错了什么,以及为什么SDWebImageManager无法在第一时间下载大分辨率图像。

由于

回答

-1

参见苹果文档中:

图像和内存管理 在低存储器的情况下,图像数据可以从一个UIImage对象进行冲洗以释放内存在系统上。此清除行为仅影响由UIImage对象内部存储的图像数据,而不影响对象本身。当您尝试绘制数据已被清除的映像时,映像对象会自动从其原始文件中重新加载数据。然而,这个额外的负载步骤可能会导致一个小的性能损失。

您应该避免创建尺寸大于1024 x 1024的UIImage对象。除了这种图像消耗的大量内存之外,在OpenGL ES中将图像用作纹理时或将图像绘制到视图或图层时,您可能会遇到问题。如果您正在执行基于代码的操作,例如通过将图形绘制到位图支持的图形上下文来调整大于1024 x 1024像素的图像,则此大小限制不适用。实际上,您可能需要以这种方式调整图像大小(或将其分成几个较小的图像),以便将其绘制到您的某个视图中。

苹果文档在某些情况下非常有用:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIImage_Class/index.html#//apple_ref/doc/c_ref/UIImage

+0

这个信息将是有效早在2007年,但在这里是2015年和iPhone 6+具有分辨率超过2K像素,甚至是iPhone 4S支持4K纹理。 – Andy

+0

该文档的部分已在不到5个月前更新(请参阅我发布的链接:“更新:2015-01-12”)。一个很好的建议,阅读更多的苹果文档之前,评价其他职位。 – Elidemir

+0

我一直在阅读他们过去5年的文档。自从iOS 3.0或更早以来,该段已存在多年。你通常应该尽量减少设备上的所有重量,但1024不再是限制。 – Andy