iOS内存优化

内存分析

静态分析 Analyze

动态分析 Instruments

  1. 可以查看内存分配情况Allocations
  2. 可以查看某个操作后内存暴涨的情况。
  3. 可以查看是否内存泄漏 Leaks。

在BaseViewController的dealloc方法里打印一下,看看离开某个页面后控制器是否被销毁了。

内存优化

  1. cell复用,header、footer复用。
  2. 尽量把view设置不透明。
  3. 减少视图的层级。
  4. 加载图片的方式
  • UIImage imageNamed: ImageAssets 用于多个地方重复使用,加载时会缓存在内存里。
  • UIImage imageWithContentsOfFile 一般用在图片数据很大,一般不需要多次使用的情况。不会长期存在内存里。
  1. 不要阻塞主线程。耗时操作放在后台进行,如网络请求,数据库读写。dispatch_get_main_queue dispatch_get_global_queue
  2. 图片大小最好和UIImageView的大小相同。在运行中缩放图片是很耗费资源的。如果图片是网络获取的,可以在下载完成后,在后台线程缩放一次,然后在赋值。
  3. 懒加载。
  4. 缓存,缓存图片SDWebImage,缓存行高。NSCache系统回收内存的时候它会自动删掉它的内容。
  5. NSDateFormatter和NSCalendar初始化很慢,可以把它作为属性或者成员变量,只在第一次用到的时候初始化一次。
  6. 避免反复处理数据。比如tableView最好用array。
  7. 使用Shadow Path来画阴影
  8. 优化TableView
  • 正确复用cell
  • 视图尽量不透明
  • 避免渐变,图片缩放。
  • 缓存行高
  • 异步加载,缓存请求结果
  • 使用shadowPath来画阴影
  • 减少视图层级
  • 使用正确的数据结构来存储数据,减少数据处理
  • 使用rowHeight sectionHeaderHeight sectionFooterHeight来设定固定的高,不要用delegate
  1. 使用正确的数据存储
    NSUserDefaults适合小数据。
    plist 每次会读取整个文件到内存里。
    NSCoding对象归档 也会读取整个文件到内存。
    大的数据存储用SQLite或Core Data。
  2. for循环里创建对象耗内存时用Autorelease Pool
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容