加载图片节省内存的方法
加载图片节省内存
1,在Image Views中调整图片大小
如果要在UIImageView中显示一个来自bundle的图片,应该保证图片的大小和UIIimageView的大小是相同的,在运行中缩放图片是很消耗资源的,特别是UIImageView嵌套在UIScrollView中的情况下。
如果图片是从远端服务器加载的话,不能控制图片大小,比如在下载前调整到合适的大小,可以在下载完成后,最好用background thread ,缩放一次,然后在UIImageView中使用缩放的图片
2,选择是否缓存图片
常见的从bundle中加载图片的方式有两种,一个用ImageNamed,一个是ImageWithContenOfFile,第一个常用一点
imageNamed的优点是当加载时,会缓存图片,imageNamed的文档中说:如果图片存在的话,用一个指定的名字在系统缓存中查找并返回一个图片对象,如果在缓存中没有找到相应的图片,这个方法从指定的文档中加载然后缓存并返回这个对象
相反,imageWithContenOfFile仅加载图片
如何选择:如果要加载一个大图片而且是一次性使用,那么就没必要缓存这个图片,用imageWithContentsOfFile就行,这样不会浪费内存来缓存他。
然后,在图片反复重用的情况下,imageNamed是一个好得多的选择
3,权衡渲染方法
在iOS中可以有很多种方法渲染图片,CAlayer,CoreGraphics ,OpenGL
简单来说,用实现渲染好的图片更快一些,如此一来iOS就免去了创建一个图片再画东西上去然后显示在屏幕上的程序,问题是需要把所有需要用到的图片放到AppBundle里面,这样就增加了体积。然而,使用图片也以为这失去了使用代码调整图片的机动性,需要一遍又一遍不断的重做他们,这样很浪费时间,如果要做一个动画效果,虽然每幅图只是一些细节的变化,但是需要很多的图片造成Bundle大小的不断增大。
所以,权衡一下利弊,到底是要性能还是要bundle保持合适的大小
4,正确设定背景图片
在View里放背景图片有很多方法,可以画上去,可以使用UIColor中的colorWithPatternImage来设置背景
可以在View中添加一个UIImgaeView座位一个子View
如果使用全幅的背景图,必须使用UIImageView,因为UIColor的ColorWithPatternImage是用来创建小的重复的图片作为背景的,这种情形下使用UIImageView可以节约不少的内存
5,尽量别在 tableView 上加载 JPEG 格式的图片
jpeg图片过大,加载jpeg图片的时候Cpu要忙于为图片解压所以延迟显示图片,如果过多的在tableView上使用jpeg图片,会造成Cpu压力过大
6, 尽量避免视图层次调整,以及视图添加和移除
7,应避免使用圆角、阴影、遮罩等属性