一、耗電量檢測
1迎卤、進(jìn)入手機(jī)"設(shè)置"->"電池",可以直觀的看出來手機(jī)應(yīng)用的耗電情況拴鸵。
2、使用Xcode打開你的工程止吐,然后插上手機(jī),使用真機(jī)running項(xiàng)目(必須是真機(jī))侨糟,然后command+6碍扔,點(diǎn)擊Energy Impact
- 藍(lán)色表示--合理
- 黃色--表示程序比較耗電
- 紅色--表示僅僅輕度
圖表中Utilization欄中是表示瞬間耗電情況
圖表中Average欄中,表示平均耗電情況
圖表中Energy Impact中coat(藍(lán)色)表示運(yùn)行項(xiàng)目代碼需要電量秕重,overhead(紅色)表示開銷不同,包括CPU的喚起,無線電模組(藍(lán)牙&WiFi),和其他系統(tǒng)資源的調(diào)用等二拐。
影響電量的五個因素服鹅,灰色表示有電量消耗,白色表示沒有電量消耗 - CPU:CPU使用率超過20%就會快速耗干電池電量百新,高效實(shí)用CPU企软,并且當(dāng)用戶出現(xiàn)模糊輸入時快速做出不做事情的反應(yīng)。
- Network:網(wǎng)絡(luò)活動會喚起需要長時間周期性供電的無線電模組饭望,可以分批次進(jìn)行網(wǎng)絡(luò)請求仗哨,來降低開銷
- Location:精密&高頻的定位會增加開銷,需要按需使用铅辞。
- GPU:圖形處理器(顯卡的處理器)厌漂,亂使用GPU會導(dǎo)致交互差,并且降低電池壽命斟珊。
- Background:后臺狀態(tài)APP仍會消耗電量苇倡,APP要按需執(zhí)行后臺操作,并使用延遲APIs來保證系統(tǒng)運(yùn)算高效執(zhí)行囤踩,另外旨椒,在APP進(jìn)入后臺狀態(tài)時,立即減少動作高职,并且通知系統(tǒng)一次這些動作已經(jīng)完成钩乍。
3、使用Instrument的Energy Log
第一步:打開手機(jī)設(shè)置怔锌,點(diǎn)擊“開發(fā)者”
第二步:點(diǎn)擊Logging
第三步:勾選Energy寥粹,并點(diǎn)擊startRecording
第四步:運(yùn)行需要測試的APP(確保手機(jī)消耗的是手機(jī)自身的電池),運(yùn)行3-5分鐘埃元,在進(jìn)入手機(jī)設(shè)置點(diǎn)擊stopRecording
第五步:使用Xcode涝涤,把手機(jī)和Xcode相連,并打開instruments中的Energy Log岛杀,點(diǎn)擊工具欄中import Logged Data from Device
第六步:得到了電池?fù)p耗日志
- Energy Usage Level的值(0--20)阔拳,值越大表示越耗電
-
CPU Activity表示CPU各種活動
耗電量優(yōu)化
一、代碼層面
1类嗤、合理使用NSDateFormatter和NSCalendar這種高開銷對象
- 性能測試表明糊肠,NSDateormatter的性能瓶頸是由于NSData格式到NSString格式的轉(zhuǎn)化,所以把NSDateFormatter創(chuàng)建單例意義不大遗锣,推薦的做法是货裹。把最常用到的日期格式做緩存。
static NSDateFormatter *cachedDateFormatter = nil;
+ (NSDateFormatter *)cachedDateFormatter {
if (!dateFormatter) {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat: @“YYYY-MM-dd HH:mm:ss”];
}
return dateFormatter;
}
2精偿、不要頻繁的刷新頁面弧圆,能刷新1行cell最好只刷新一行赋兵,盡量不要使用reloadData。
3搔预、選擇正確的集合
- NSArray霹期,使用index來查找很快(插入和刪除很慢)
- 字典,使用鍵來查找很快
- NSSets是無序的拯田,用鍵查找很快历造,插入/刪除很快
4、少用運(yùn)算獲得圓角勿锅,不論view.maskToBounds還是layer.clipToBounds都會有很大的資源開銷帕膜,必須要用圓角的話,不如把圖片本身做成圓角
5溢十、懶加載垮刹,不要一次性創(chuàng)建所有的subview,而是需要時才創(chuàng)建
6张弛、重用
- 可以模仿UITableview和UICollectionView荒典,不要一次性創(chuàng)建所有的subview,而是需要時才創(chuàng)建,完成了實(shí)名吞鸭,把他放入到一個可重用集合中寺董。
7、圖片處理
- 圖片與imageView相同大小刻剥,避免多余運(yùn)算
- 可以使用整副的圖片遮咖,增加應(yīng)用體積,但是節(jié)省CPU
- 可調(diào)大小的圖片造虏,可以省去一些不必要的空間
- CALayer御吞,CoreGraphics,甚至OpenGL來繪制漓藕,陶珠,消耗CPU
8、cache,cache,cache(緩存所有需要的)
- 服務(wù)器相應(yīng)結(jié)果的緩存(圖片)
- 復(fù)雜計(jì)算結(jié)果的緩存(UITableview的行高)