iOS App性能提升秘笈

  • 如果要做一個優(yōu)秀的iOS app, 工程師的職責(zé), 就是盡可能的優(yōu)化App的性能.
  • 本文絕大多數(shù)內(nèi)容來自Macelo Fabri的文章, 重新進(jìn)行了組織.
  • 本文沒有提Instruments,但是,它其實是性能優(yōu)化的前提。他正如易學(xué)中的診斷階段,下面列出的都是治療的配方。

1. 內(nèi)存

1.1 使用ARC管理內(nèi)存

在大多數(shù)情況下, 都應(yīng)該使用ARC, 因為:

  • 使用ARC, 當(dāng)你的對象不用時, 系統(tǒng)會盡快的幫你進(jìn)行release. MRC的話未必能保證.
  • 使用ARC, 能幫你減少內(nèi)存泄露.

1.2 選用合適的集合

  • NSArray, NSet, NSDictionary, 適用場景不同, 謹(jǐn)慎選擇.

1.3 處理操作系統(tǒng)的內(nèi)存警告

  • 其實這個不能說是性能問題, 而是你的應(yīng)用在前臺會掛掉, 或者被系統(tǒng)從后臺清理掉.

1.4 使用 Autorelease Pool

2. UI

2.1 盡量使用 reuseIdentifier

  • 對于UITableView和UICollectionView中的Cell等, 使用reuseIdentifier, 可以避免每次都重新創(chuàng)建Cell.

2.2 盡可能設(shè)置Views 為 Opaque(不透明)

  • 如果你的View不是透明的, 那就顯式的設(shè)置Opaque為YES, 這樣系統(tǒng)在繪制的時候, 就可以進(jìn)行一定的優(yōu)化. 雖然設(shè)置起來很繁瑣, 但是盡可能多的設(shè)置吧.

2.3 避免很大的XIBs文件

  • 就算你只使用了XIBs文件中的一個view, 系統(tǒng)在加載XIBs文件的時候, 也會整個加載. 所以盡量保證每個XIBs文件中只有一個View. 但是StoryBoard沒有這個問題, 如果要將多個View放在一起, 盡量使用StoryBoard.

2.4 保證Images和UIImageView的大小相同(別縮放)

  • 如果這兩者尺寸不一致, 顯示的時候就會發(fā)生縮放. 縮放是耗時操作, 在滾動視圖中尤其耗時.

2.5 重用或者懶加載Views

  • 這個沒啥好說的... ...

2.6 考慮使用繪圖函數(shù)

  • 減少了圖片的使用, 適當(dāng)考慮.

2.7 采用合適的手段設(shè)置背景圖片

  • 對于重復(fù)鋪滿的背景圖片, 可以使用UIColoer進(jìn)行設(shè)置.

2.8 使用Shadow Path設(shè)置陰影

2.9 優(yōu)化你的Table Views

3. 多線程

3.1 不要阻塞主線程

  • 主線程在處理UI, 如果進(jìn)行耗時操作, 發(fā)生了阻塞, 就等著卡吧.

3.2 小心在線程里大量的分配內(nèi)存空間

  • 堆是有鎖的, 每一個時刻, 只能有一個線程進(jìn)行內(nèi)存分配操作.

4. 網(wǎng)絡(luò)

4.1 啟用GZIP 壓縮

  • iOS和Web服務(wù)器對GZIP的支持很好, 尤其對于文本類(Json, XML)的壓縮率很高, 能壓縮到原來的1/5左右, 所以值得采用.

4.2 減少不必要的Web數(shù)據(jù)傳輸

  • 如果只需要用戶名和頭像, 就別把性別, 城市, 興趣愛好什么一起傳過來.

5. 持久化

5.1. 選擇正確的數(shù)據(jù)存儲方式

  • NSUserDefaults
  • 結(jié)構(gòu)化文件: XML, JSON, or Plist format
  • 歸檔: Archive using NSCoding
  • 數(shù)據(jù)庫: SQLite
  • Core Data.

6. 其他

6.1緩存

  • 通過內(nèi)存, 文件系統(tǒng), 數(shù)據(jù)庫對網(wǎng)絡(luò)數(shù)據(jù)等進(jìn)行緩存, 是提高性能的不二法則. 空間緯度上越近, 訪問越快.

6.2 重用創(chuàng)建代價很大的對象

  • 不需解釋, 這也是為什么單例模式的存在.

6.3 避免重復(fù)處理數(shù)據(jù)

  • 比如解析Json數(shù)據(jù), 比如計算表格高度

6.4 選擇合適的數(shù)據(jù)格式(XML, JSON)

  • 一般來說xml數(shù)據(jù)大, 但是支持校驗, 支持SAX解析, json數(shù)據(jù)小.

6.5 減少啟動時間

  • 這對應(yīng)用體驗很重要

6.6 避免使用Date Formatters

  • 這貨性能很差

6.7 啟用編譯器優(yōu)化選項

  • 默認(rèn)的優(yōu)化器選項是 -Os, 最快最小。 但是如果不是專門進(jìn)行科學(xué)計算的應(yīng)用,你可以使用-Ofast,如果需要IEEE浮點運算,則可以使用-O3。這兩個選項通常只會增加百分之幾的應(yīng)用體積,但是性能會顯著提升。

6.8 啟用連接器優(yōu)化

  • 通過LTO進(jìn)行連接優(yōu)化。普通的設(shè)置,只是在單個.m文件內(nèi)進(jìn)行優(yōu)化,啟用該選項后,會在項目的全局范圍內(nèi)進(jìn)行優(yōu)化。

6.9 使用Accelerate框架

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

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,872評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,533評論 19 139
  • 當(dāng)我們開發(fā)iOS應(yīng)用時,好的性能對我們的App來說是很重要的。你的用戶也希望如此,但是如果你的app表現(xiàn)的反應(yīng)遲鈍...
    iOS開發(fā)攻城獅閱讀 1,607評論 0 14
  • 春到人間人似玉,燈燒月下月如銀! 今天是個好天氣--天晴風(fēng)清;今天是個好日子--元宵佳節(jié),又稱為“上元節(jié)”,是每年...
    水上萍閱讀 286評論 4 5
  • 雖然生活就是平淡的,但不是所有人都能把白開水變成香茗。由此可見,生活對于每個人來說意義不同,所創(chuàng)造的價值也不盡相同...
    LydiaMa閱讀 180評論 0 0

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