耗电量优化

发表于:,更新于:,By smmchn
大纲
  1. 合理使用NSDateFormatter 和 NSCalendar
    这种高开销对象,性能测试表明,NSDateFormatter的性能瓶颈是由于NSDate格式到NSString格式的转化,所以把NSDateFormatter创建单例意义不大.推荐的做法是,把最常用到的日期格式做缓存.
    ```
    static NSDateFormatter *cachedDateFormatter = nil;
  • (NSDateFormatter *)cachedDateFormatter {
    if (!dateFormatter) { 
      dateFormatter = [[NSDateFormatter alloc] init]; 
      [dateFormatter setDateFormat: @“YYYY-MM-dd HH:mm:ss”]; 
          } 
    return dateFormatter;
    }
  1. 不要频繁的刷新页面
    能刷新1行cell最好只刷新一行,尽量不要使用reloadData.

  2. 选择正确的集合
    NSArray,使用index来查找很快(插入和删除很慢)
    字典,使用键来查找很快
    NSSets,是无序的,用键查找很快,插入/删除很快

  3. 少用运算获得圆角
    不论view.maskToBounds还是layer.clipToBounds都会有很大的资源开销,必须要用圆角的话,不如把图片本身就做成圆角

  4. 懒加载,不要一次性创建所有的subview,而是需要时才创建.

  5. 重用
    可以模仿UITableView和UICollectionView,不要一次性创建所有的subview,而是需要时才创建.完成了使命,把他放入到一个可重用集合中

  6. 图片处理
    图片与imageView相同大小,避免多余运算
    可以使用整副的图片,增加应用体积,但是节省CPU
    可调大小的图片,可以省去一些不必要的空间
    CALayer,CoreGraphics,甚至OpenGL来绘制,消耗CPU
    cache,cache,cache(缓存所有需要的)
    服务器相应结果的缓存(图片)
    复杂计算结果的缓存(UITableView的行高)
    尽量少用透明或半透明,会产生额外的运算. 
使用ARC减少内存失误,dealloc需要重写并对属性置为nil 
避免庞大的xib,storyBoard,尽量使用纯代码开发

  7. CPU层面
    Timer的时间间隔不宜太短,满足需求即可 
线程适量,不宜过多,不要阻塞主线程 
优化算法,减少循环次数 
定位和蓝牙按需取用,定位之后要关闭或降低定位频率