# 9. iOS开发优化

## 省电

* 如果使用定位，需要在定位完毕之后关闭定位，或者降低定位的频率，不停的定位会消耗电量。
* 如果使用蓝牙，需要使用的时候再开启蓝牙，用完之后关闭蓝牙，蓝牙也很耗电。
* 优化算法，减少循环次数，大量循环会让CPU一直处于忙碌状态，特别费电。
* 尽量不要使用网络轮询（心跳包、定时器），推荐使用推送。
* timer的时间间隔不宜太短，满足需求即可。
* 不要频繁刷新页面，能刷新1行`cell`的最好刷新一行，尽量不要`reloadData`。
* 线程适量，不宜过多。

## 性能优化

* 避免使用庞大的XIB、Storyboard，尽量使用纯代码开发界面，尤其对于App启动界面、首页。
* 使用懒加载的方式延迟加载界面。
* 避免反复处理数据。
* 避免使用`NSDateFormatter`和`NSCalendar`。
* 图片缓存的取舍`UIImage`加载图片方式一般有两种:A.`imagedNamed`初始化、B.`imageWithContentsOfFile`初始化二者不同之处在于,`imageNamed`默认加载图片成功后会内存中缓存图片,这个方法用一个指定的名字在系统缓存中查找并返回一个图片对象.如果缓存中没有找到相应的图片对象,则从指定地方加载图片然后缓存对象，并返回这个图片对象.而`imageWithContentsOfFile`则仅只加载图片,不缓存.大量使用`imageNamed`方式会在不需要缓存的地方额外增加开销CPU的时间来做这件事.当应用程序需要加载一张比较大的图片并且使用一次性，那么其实是没有必要去缓存这个图片的，用`imageWithContentsOfFile`是最为经济的方式,这样不会因为`UIImage`元素较多情况下，CPU会被逐个分散在不必要缓存上浪费过多时间.使用场景需要编程时，应该根据实际应用场景加以区分，`UIImage`虽小，但使用元素较多问题会有所凸显。
