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)加密存儲