iOS面試題:對(duì)程序性能的優(yōu)化你有什么建議?

  • 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面試題合集

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.使用復(fù)用機(jī)制 2.盡可能設(shè)置 View 為不透明 3.避免臃腫的 XIB 文件 4.不要阻塞主線程 5.圖片尺...
    墨徠閱讀 922評(píng)論 0 0
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,681評(píng)論 1 32
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,614評(píng)論 4 61
  • 放下對(duì)你的思念 放下心里的愁怨 下定決心按時(shí)睡眠 為了健康隨時(shí)鍛煉 喜歡嫦娥太遠(yuǎn) 我是富翁在夢(mèng)間 得不到的財(cái)富放不...
    讀書不負(fù)我魏霞閱讀 319評(píng)論 3 9
  • 1、感謝網(wǎng)絡(luò)平臺(tái)讓我有很多學(xué)習(xí)機(jī)會(huì),不一定要花很多時(shí)間才能學(xué)習(xí),也是隨時(shí)隨地的學(xué),太方便太幸福了。 2、感恩我女兒...
    8e9577ac0956閱讀 332評(píng)論 0 0

友情鏈接更多精彩內(nèi)容