iOS App優(yōu)化

App開發(fā)完成之后,優(yōu)化成為了不可缺少的一環(huán)。優(yōu)化的部分小編從接下來幾個方面著手:

一、App啟動優(yōu)化

二、內(nèi)存優(yōu)化

三、UI優(yōu)化

四、App瘦身

五、架構(gòu)優(yōu)化

六、App安全優(yōu)化

1、App啟動優(yōu)化

App啟動速度是app體驗的第一感受,如果一個 app啟動時間需要漫長的等待過程,對于富有耐心的我來說直接對這個app長按delete了,再長點,直接被kill了.

APP的啟動可以分為兩個階段,即main()執(zhí)行之前和main()執(zhí)行之后。

總結(jié)如下:

t(App 總啟動時間) = t1( main()之前的加載時間 ) + t2( main()之后的加載時間 )。

t1 = 系統(tǒng)的 dylib (動態(tài)鏈接庫)和 App 可執(zhí)行文件的加載時間;

t2 =? main()函數(shù)執(zhí)行之后到AppDelegate類中的applicationDidFinishLaunching:withOptions:方法執(zhí)行結(jié)束前這段時間。

App啟動之前主要是加載.o可執(zhí)行文件,加載動態(tài)鏈接庫(系統(tǒng)的動態(tài)庫,runtime的動態(tài)加載的方法,自己添加的framework)操作。所以可以進行如下操作進行優(yōu)化:

1.1 main函數(shù)之前的優(yōu)化?

1、減少不必要的framework,特別是第三方的,因為動態(tài)鏈接比較耗時

2、合并或者刪減一些ObjC類(class)、方法(selector)、分類(category)的數(shù)量

3、刪減一些無用的靜態(tài)變量

4、刪減沒有被調(diào)用到或者已經(jīng)廢棄的方法

5、將不必須在+load方法中做的事情延遲到+initialize中

1.2 ?main函數(shù)之后的優(yōu)化?

1、梳理各個二方/三方庫,找到可以延遲加載的庫,做延遲加載處理,比如放到首頁控制器的viewDidAppear方法里。

2、梳理業(yè)務(wù)邏輯,把可以延遲執(zhí)行的邏輯,做延遲執(zhí)行處理。比如檢查新版本、注冊推送通知等邏輯。

3、避免復(fù)雜/多余的計算。

4、采用性能更好的API。

5、啟動階段的網(wǎng)絡(luò)請求,是否都放到異步請求;

6、避免在首頁控制器的viewDidLoad和viewWillAppear做太多事情,這2個方法執(zhí)行完,首頁控制器才能顯示,部分可以延遲創(chuàng)建的視圖應(yīng)做延遲創(chuàng)建/懶加載處理。

7、首頁控制器用純代碼方式來構(gòu)建,減少xib的使用。

2、內(nèi)存優(yōu)化

1、減少內(nèi)存泄漏

方法:

1.1 通過dealloc方法查找

1.2 使用Instrument工具庫里的Leaks

1.3 使用MLeaksFinder

2、降低內(nèi)存峰值

1.lazy load, 懶加載

2.靈活運用圖片和文件加載

3.xib加載會把所有的控件都加載到內(nèi)存中,所以減少xib的使用。

3、代碼的優(yōu)化

1、比如通過WKWebView取代UIWebView

2、減少不必要控件的使用

3、UITableViewCell和UICollectionView善用reuseIdentifier

4、根據(jù)需要按需加載視圖,按需加載。

3、UI優(yōu)化

拿UITableView來說吧

3.1、cell高度在網(wǎng)絡(luò)請求中完成,并緩存到model中

2、cell中顯示的數(shù)據(jù),最好在網(wǎng)絡(luò)請求中完成,避免在 cell賦值的時候再加工

3、cell復(fù)用reuseIdentifier

4、layer切圓角會觸發(fā)離屏渲染,改成CAShapeLayer和UIBezierPath畫圓角(設(shè)置圓角,設(shè)置shadows)

5、減少cell的層級,盡可能減少不必要的控件的使用

6、控件不要透明

7、異步繪制

8.使用FaceBook的AsyncDisplayKit來寫復(fù)雜的界面,能夠獲得異步繪制,預(yù)先加載等諸多好處。

3.2?盡量使用WKWebView來替代WebView的使用

3.3?減少不必要控件的使用

3.4?根據(jù)需要按需加載視圖,按需加載

可產(chǎn)考:https://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/

4、App瘦身

App瘦身是想辦法減少ipa的大小。


1、使用LSUnusedResources查找沒用的圖片并刪除

2、圖片無損壓縮(WebP圖片壓縮)

? ? ? 2.1 Webp 壓縮率?,?持有損與?損壓縮

? ? ? 2.2 WebP 體積?幅減少,?眼看不出差異?

3、使用字體庫取代圖片

4、代碼瘦身

? ? ? 4.1、AppCode代碼靜態(tài)檢查

? ? ?4.2、清理無用的代碼(Class,Method,Import)

5、刪掉一些沒用的三方庫

6、使用替代方案取代三方庫

5、架構(gòu)優(yōu)化

常用的架構(gòu)有MVC 、MVP、MVVM、VIPER

用膩了令人酸爽的MVC ,選擇更換MVVM

沒有絕對說哪個框架好哪個框架不好,根據(jù)項目大小和項目的需要選擇適合自己的框架才是最好的。

本人比較喜歡MVVM + RAC+Router框架。

6、App安全優(yōu)化

蘋果爸爸對數(shù)據(jù)安全做的努力大家都有目共睹的,上架到Appstore的ipa是是加過殼的,不好反編譯,主要是針對越獄的手機ipa靜態(tài)分析那就涼涼了。感興趣的看下網(wǎng)上資料怎么反編譯的。個人覺得要搞你app會從網(wǎng)絡(luò)對你的數(shù)據(jù)進行攻擊,或者拿到相應(yīng)的ipa對你進行反編譯。我覺得做到以下幾點,想搞你他都覺得浪費時間,還不如多搞幾個沒做安全處理的app。

1、使用https取代http

關(guān)于http的缺點和https的使用可參考網(wǎng)上的資料,或者看下我的這篇文章。

http://www.itdecent.cn/writer#/notebooks/14225123/notes/53160589

2、接口加密處理

3、關(guān)鍵數(shù)據(jù)(三方的key啥的)通過接口獲取

4、敏感信息(NSUserdefault,Sqlite)加密存儲

參考:http://www.itdecent.cn/p/561fec0caa01

?著作權(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)容

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