近期在工作中,对APP进行了内存占用优化,减少了不少内存占用,在此将经验进行总结和分享,也欢迎大家进行交流。
在优化的过程中,主要使用了以下工具:
Instruments和Allocations
这个工具能显示出应用的实际内存占用,并可以按大小进行排序。我们只要找出那些占用高的,分析其原因,找到相应的解决办法。
MLeaksFinder
腾讯开源的一款内存泄漏查找工具,可以在使用APP的过程中,即时的提醒发生了内存泄漏。
Xcode的Memory Graph
这款工具在查找内存泄漏方面,可以作为MLeaksFinder的补充,用于分析对象之间的循环引用关系。
另外通过分析某个时刻的Live Objects,可以分析出哪些是不合理的。
总结下来,主要有几方面的原因导致内存占用高:
使用了不合理的API
网络下载的图片过大
第三方库的缓存机制
Masonry布局框架
没必要常驻内存的对象,实现为常驻内存
数据模型中冗余的字段
内存泄漏
下面从这几方面展开讨论。
1.使用了不合理的API
1.1 对于仅使用一次或是使用频率很低的大图片资源,使用了[UIImage imageNamed:]方法进行加载
图片的加载,有两种方式,一种是[UIImage imageNamed:],加载后系统会进行缓存,且没有API能够进行清理;另一种是[UIImage imageWithContentsOfFile:]或[[UIImage alloc] in