1.使用復(fù)用機(jī)制
2.盡可能設(shè)置 View 為不透明
3.避免臃腫的 XIB 文件
4.不要阻塞主線程
5.圖片尺寸匹配 UIImageView
6.選擇合適的容器
7.啟用 GZIP 數(shù)據(jù)壓縮
8.View 的復(fù)用和懶加載機(jī)制
9、緩存
服務(wù)器的響應(yīng)信息(response)。
圖片。
計(jì)算值。比如:UITableView 的 row heights。10.關(guān)于圖形繪制
11.處理 Memory Warnings
在 AppDelegate 中實(shí)現(xiàn) - [AppDelegate applicationDidReceiveMemoryWarning:] 代理方法。
在 UIViewController 中重載 didReceiveMemoryWarning 方法。
監(jiān)聽(tīng) UIApplicationDidReceiveMemoryWarningNotification 通知。12.復(fù)用高開銷的對(duì)象
13.減少離屏渲染(設(shè)置圓角和陰影的時(shí)候可以選用繪制的方法)
14.優(yōu)化 UITableView
通過(guò)正確的設(shè)置 reuseIdentifier 來(lái)重用 Cell。
盡量減少不必要的透明 View。
盡量避免漸變效果、圖片拉伸和離屏渲染。
當(dāng)不同的行的高度不一樣時(shí),盡量緩存它們的高度值。
如果 Cell 展示的內(nèi)容來(lái)自網(wǎng)絡(luò),確保用異步加載的方式來(lái)獲取數(shù)據(jù),并且緩存服務(wù)器的 response。
使用 shadowPath 來(lái)設(shè)置陰影效果。
盡量減少 subview 的數(shù)量,對(duì)于 subview 較多并且樣式多變的 Cell,可以考慮用異步繪制或重寫 drawRect。
盡量?jī)?yōu)化 - [UITableView tableView:cellForRowAtIndexPath:] 方法中的處理邏輯,如果確實(shí)要做一些處理,可以考慮做一次,緩存結(jié)果。
選擇合適的數(shù)據(jù)結(jié)構(gòu)來(lái)承載數(shù)據(jù),不同的數(shù)據(jù)結(jié)構(gòu)對(duì)不同操作的開銷是存在差異的。
對(duì)于 rowHeight、sectionFooterHeight、sectionHeaderHeight 盡量使用常量。15.選擇合適的數(shù)據(jù)存儲(chǔ)方式
在 iOS 中可以用來(lái)進(jìn)行數(shù)據(jù)持有化的方案包括:
NSUserDefaults。只適合用來(lái)存小數(shù)據(jù)。
XML、JSON、Plist 等文件。JSON 和 XML 文件的差異在「選擇正確的數(shù)據(jù)格式」已經(jīng)說(shuō)過(guò)了。
使用 NSCoding 來(lái)存檔。NSCoding 同樣是對(duì)文件進(jìn)行讀寫,所以它也會(huì)面臨必須加載整個(gè)文件才能繼續(xù)的問(wèn)題。
使用 SQLite 數(shù)據(jù)庫(kù)。可以配合 FMDB 使用。數(shù)據(jù)的相對(duì)文件來(lái)說(shuō)還是好處很多的,比如可以按需取數(shù)據(jù)、不用暴力查找等等。
使用 CoreData。也是數(shù)據(jù)庫(kù)技術(shù),跟 SQLite 的性能差異比較小。但是 CoreData 是一個(gè)對(duì)象圖譜模型,顯得更面向?qū)ο?;SQLite 就是常規(guī)的 DBMS。16.減少應(yīng)用啟動(dòng)時(shí)間
快速啟動(dòng)應(yīng)用對(duì)于用戶來(lái)說(shuō)可以留下很好的印象。尤其是第一次使用時(shí)。
保證應(yīng)用快速啟動(dòng)的指導(dǎo)原則:
盡量將啟動(dòng)過(guò)程中的處理分拆成各個(gè)異步處理流,比如:網(wǎng)絡(luò)請(qǐng)求、數(shù)據(jù)庫(kù)訪問(wèn)、數(shù)據(jù)解析等等。
避免臃腫的 XIB 文件,因?yàn)樗鼈儠?huì)在你的主線程中進(jìn)行加載。重申:Storyboard 沒(méi)這個(gè)問(wèn)題,放心使用。
注意:在測(cè)試程序啟動(dòng)性能的時(shí)候,最好用與 Xcode 斷開連接的設(shè)備進(jìn)行測(cè)試。因?yàn)?watchdog 在使用 Xcode 進(jìn)行調(diào)試的時(shí)候是不會(huì)啟動(dòng)的。17.使用 Autorelease Pool (內(nèi)存釋放池)
18.imageNamed 和 imageWithContentsOfFile
更多:iOS面試題合集