最近在做一个相册类的应用,但是在内存方面一直出现这一些问题,原因就是有着大量图片显示和存取,这里整理一下查到的资料,列举一下造成内存警告的潜在原因
1.imageName创建UIimage的时候实际上只是在Bundle内查找到文件名,然后把文件名返回,并没有对文件惊醒读取和解码,当UIImage第一次显示在屏幕的时候解码方法才会被调用,并且会保存到一个全局缓存当中,且APP第一次退出或者受到内存警告的时候才会被清空。!!!
2.imageWithData同样也不能避免缓存
3.如何避免缓存,把图片用 CGContextDrawImage() 绘制到画布上,然后把画布的数据取出来当作图片。
4.cell重用问题,老生常谈,要注意的就是footer header的复用,
- (nullable __kindof UITableViewHeaderFooterView *)dequeueReusableHeaderFooterViewWithIdentifier:(NSString *)identifier
究其原因,一方面是相片本身大小,iphone相机返回的照片都在2M左右,而每个app如果内存超过20M就会爆出内存警告,解决办法,压缩图片大小:
UIImageJPEGRepresentation(image1, kCompressionQuality)