性能對(duì) iOS 應(yīng)用的開(kāi)發(fā)尤其重要,如果你的應(yīng)用反應(yīng)很慢,失望的用戶(hù)會(huì)把他們的失望寫(xiě)滿(mǎn)App Store的評(píng)論。然而由于iOS設(shè)備的限制,有時(shí)搞好性能是一件難事。開(kāi)發(fā)過(guò)程中你會(huì)有很多需要注意的事項(xiàng),你也很容易在做出選擇時(shí)忘記考慮性能影響。
這篇文章總結(jié)了開(kāi)發(fā)中常用到的一些性能優(yōu)化點(diǎn)
1:應(yīng)用啟動(dòng)時(shí)間 應(yīng)用啟動(dòng)時(shí),只加載啟動(dòng)相關(guān)的資源和必須在啟動(dòng)時(shí)加載的資源。
2:本地圖片加載方式 本地圖片加載常用方法有兩種:
a. [UIImage imageNamed:@"xx.png"] 圖片多次使用時(shí)使用,需要使用此方式加入緩存
b. [[UIImage alloc] initWithContentsOfFile :@"xx.png"] 圖片不常使用時(shí),不使用緩存
3:不要阻塞主線(xiàn)程 開(kāi)發(fā)中除了UI處理外,其它任務(wù)盡量放在后臺(tái)線(xiàn)程加載。
4:UIView
a. 如果你的View是透明的,需要設(shè)置opaque為YES。
b. 使用UITableView和UICollectionView的重用,并緩存動(dòng)態(tài)Cell的高度。
c. 延遲加載不急需要的Views。
d. 盡量避免代碼裁剪圖片,如果必須需在后臺(tái)線(xiàn)程處理。
5:緩存 緩存需要重復(fù)顯示的數(shù)據(jù),像網(wǎng)絡(luò)請(qǐng)求、圖片。
6:避免對(duì)象創(chuàng)建時(shí)過(guò)多消耗資源 假設(shè)應(yīng)用中多次使用到日期處理,將保持日期對(duì)象全局唯一。
7:釋放對(duì)象
a. ARC中創(chuàng)建對(duì)象過(guò)多時(shí),內(nèi)存會(huì)持續(xù)升高,在需要時(shí)添加自動(dòng)釋放池釋放不需要的資源。
b. 及時(shí)釋放自己開(kāi)辟的內(nèi)存空間。
8:防止循環(huán)引用
a. 在頭文件中盡量避免import導(dǎo)入頭文件,使用@class 聲明類(lèi),在.m文件中#import。
b. 在設(shè)置代理/block中使用相應(yīng)的關(guān)鍵字引用對(duì)象。
9:數(shù)據(jù)存儲(chǔ) 數(shù)據(jù)存儲(chǔ)大致分plist、對(duì)象歸檔、sqlite。NSUserDefault適合存儲(chǔ)小量數(shù)據(jù),私密信息使用Keychain, sqlite適合大量數(shù)據(jù),歸檔性能較低,盡量避免使用。
10:內(nèi)存警告處理 當(dāng)系統(tǒng)發(fā)出內(nèi)存警告時(shí),釋放不必要的數(shù)據(jù)的三種方式。 AppDelegate中實(shí)現(xiàn)applicationDidReceiveMemoryWarning UIViewController 重寫(xiě)didReceiveMemoryWarning 注冊(cè)通知:UIApplicationDidReceiveMemoryWarningNotification
11:性能檢測(cè) 靜態(tài)分析APP:菜單-Product-Analyze 可以定位未使用的變量,內(nèi)存泄漏 分析APP每個(gè)操作占用時(shí)間: Instruments-Time profiler。 動(dòng)態(tài)分析內(nèi)存泄漏:Instruments-Leaks。