[iOS]图片高清度太高, 导致内存过大Crash

先说一下状况, 后台提供的图片太高清了, 每个图片都在2-4MB, iOS上每个页面需要同时下载并展示10-15张.

这个时候, 如果我多滑动collectionView几次, 直接App就崩溃了(reason: 是内存警告, 超出每个App可用的最大内存限制)

解决方法: 经过各种百度, Google以后. 我是这样解决的. 缩小图片的高清度.

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

#

NSStringcachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;[cachePath stringByAppendingPathComponent:@"imageCache"];

#

NSStringimagePath = [NSString stringWithFormat:@"%@/%d", cachePath, [self.theExhib.worksPic hash]];

#

NSFileManagerfileManager = [NSFileManager defaultManager];NSDatada = nil;

##

// 判断一下图片在本地在不在

if ([fileManager fileExistsAtPath:imagePath]) {

// 如果在, 直接就取

da = [NSData dataWithContentsOfFile:imagePath];

}else {

// 如果不在, 就重新下载(self.theExhib.worksPic是网址)

da = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.theExhib.worksPic]];

// 把图片流写入本地[da writeToFile:imagePath atomically:YES];

}

#

// 把NSData流转化成UIImage对象

UIImageima = [UIImage imageWithData:da];

// 调用自己的方法imageWithImageSimple scaldToSize: (Size后面填写的你要缩小成的图片分辨率)

ima = [self imageWithImageSimple:ima scaledToSize:CGSizeMake(100, 200)];

// 回到主线程刷新UI dispatch_async(dispatch_get_main_queue(), ^{[self.bacImageV setImage:ima];

});

});

####

- ( UIImage)imageWithImageSimple:( UIImage)image scaledToSize:( CGSize )newSize{

#

UIGraphicsBeginImageContext (newSize);

#

[image drawInRect : CGRectMake ( 0 , 0 ,newSize. width ,newSize. height )];

#

UIImagenewImage = UIGraphicsGetImageFromCurrentImageContext ();

#

UIGraphicsEndImageContext ();

#

return newImage;

}

文/M_Lee(简书作者)

原文链接:http://www.jianshu.com/p/eba9693ed75d

著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容