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

你可能感兴趣的:(iOS内存优化)