一.代碼層面
1.合理使用NSDateFormatter 和 NSCalendar這種高開(kāi)銷(xiāo)對(duì)象
性能測(cè)試表明,NSDateFormatter的性能瓶頸是由于NSDate格式到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.不要頻繁的刷新頁(yè)面,能刷新1行cell最好只刷新一行,盡量不要使用reloadData.
3.選擇正確的集合
NSArray,使用index來(lái)查找很快(插入和刪除很慢)
字典,使用鍵來(lái)查找很快
NSSets,是無(wú)序的,用鍵查找很快,插入/刪除很快
4.少用運(yùn)算獲得圓角,不論view.maskToBounds還是layer.clipToBounds都會(huì)有很大的資源開(kāi)銷(xiāo),必須要用圓角的話,不如把圖片本身就做成圓角
5.懶加載,不要一次性創(chuàng)建所有的subview,而是需要時(shí)才創(chuàng)建.
6.重用
可以模仿UITableView和UICollectionView,不要一次性創(chuàng)建所有的subview,而是需要時(shí)才創(chuàng)建.完成了使命,把他放入到一個(gè)可重用集合中
7.圖片處理
圖片與imageView相同大小,避免多余運(yùn)算
可以使用整副的圖片,增加應(yīng)用體積,但是節(jié)省CPU
可調(diào)大小的圖片,可以省去一些不必要的空間
CALayer,CoreGraphics,甚至OpenGL來(lái)繪制,消耗CPU
8.cache,cache,cache(緩存所有需要的)
服務(wù)器相應(yīng)結(jié)果的緩存(圖片)
復(fù)雜計(jì)算結(jié)果的緩存(UITableView的行高)
9.盡量少用透明或半透明,會(huì)產(chǎn)生額外的運(yùn)算.
10.使用ARC減少內(nèi)存失誤,dealloc需要重寫(xiě)并對(duì)屬性置為nil
11.避免龐大的xib,storyBoard,盡量使用純代碼開(kāi)發(fā)
CPU層面
1.Timer的時(shí)間間隔不宜太短,滿(mǎn)足需求即可
2.線程適量,不宜過(guò)多,不要阻塞主線程
3.優(yōu)化算法,減少循環(huán)次數(shù)
4.定位和藍(lán)牙按需取用,定位之后要關(guān)閉或降低定位頻率