iOS 應(yīng)用優(yōu)化筆記

移動(dòng)端關(guān)注的一些指標(biāo)
運(yùn)行多少小時(shí)不崩潰;
多次打開頁(yè)面,控制崩潰率;
界面優(yōu)化,如何才能讓用戶不急躁、不煩躁;
服務(wù)器沒有返回?cái)?shù)據(jù),是否會(huì)導(dǎo)致奔潰;
網(wǎng)絡(luò)不好,數(shù)據(jù)來的太慢,界面是否不流暢;
從數(shù)據(jù)庫(kù)讀的數(shù)據(jù)太慢如何解決等。

網(wǎng)絡(luò)不好的情況處理:
移動(dòng)端界面應(yīng)該有自己的邏輯,需要網(wǎng)絡(luò)數(shù)據(jù)的地方,應(yīng)該有默認(rèn)值,這樣在網(wǎng)絡(luò)數(shù)據(jù)沒有返回的情況下,讓用戶有數(shù)據(jù)可以看到。收到的網(wǎng)絡(luò)數(shù)據(jù)應(yīng)該是通過某種方式刷新到界面,而不是等到數(shù)據(jù)返回才刷新頁(yè)面。當(dāng)沒有網(wǎng)絡(luò)數(shù)據(jù)的時(shí)候,界面應(yīng)該可以自成一體,走的通流程,不強(qiáng)依賴網(wǎng)絡(luò)數(shù)據(jù)。
在弱網(wǎng)模式下調(diào)試是我們必備的功力,因?yàn)槲覀円紤]用戶的實(shí)施環(huán)境通常都不會(huì)很好。把經(jīng)常使用的數(shù)據(jù),存到緩存,提高APP的運(yùn)行效率、界面流程度。同時(shí),我們需要具備收集奔潰日志的功能,這樣才能更好的減少崩潰,提高用戶體驗(yàn)。

通過 Storyboard 創(chuàng)建視圖對(duì)象時(shí),其資源消耗會(huì)比直接通過代碼創(chuàng)建對(duì)象要大非常多,在性能敏感的界面里,Storyboard 并不是一個(gè)好的技術(shù)選擇。

盡量推遲對(duì)象創(chuàng)建的時(shí)間,并把對(duì)象的創(chuàng)建分散到多個(gè)任務(wù)中去。盡管這實(shí)現(xiàn)起來比較麻煩,并且?guī)淼膬?yōu)勢(shì)并不多,但如果有能力做,還是要盡量嘗試一下。如果對(duì)象可以復(fù)用,并且復(fù)用的代價(jià)比釋放、創(chuàng)建新對(duì)象要小,那么這類對(duì)象應(yīng)當(dāng)盡量放到一個(gè)緩存池里復(fù)用。

對(duì)象銷毀
對(duì)象的銷毀雖然消耗資源不多,但累積起來也是不容忽視的。通常當(dāng)容器類持有大量對(duì)象時(shí),其銷毀時(shí)的資源消耗就非常明顯。同樣的,如果對(duì)象可以放到后臺(tái)線程去釋放,那就挪到后臺(tái)線程去。這里有個(gè)小 Tip:把對(duì)象捕獲到 block 中,然后扔到后臺(tái)隊(duì)列去隨便發(fā)送個(gè)消息以避免編譯器警告,就可以讓對(duì)象在后臺(tái)線程銷毀了。

NSArray *tmp = self.array;
self.array = nil;
dispatch_async(queue, ^{
[tmp class];
});

布局計(jì)算
視圖布局的計(jì)算是 App 中最為常見的消耗 CPU 資源的地方。如果能在后臺(tái)線程提前計(jì)算好視圖布局、
并且對(duì)視圖布局進(jìn)行緩存,那么這個(gè)地方基本就不會(huì)產(chǎn)生性能問題了。

不論通過何種技術(shù)對(duì)視圖進(jìn)行布局,其最終都會(huì)落到對(duì) UIView.frame/bounds/center 等屬性的
調(diào)整上。上面也說過,對(duì)這些屬性的調(diào)整非常消耗資源,所以盡量提前計(jì)算好布局,在需要時(shí)一次性調(diào)
整好對(duì)應(yīng)屬性,而不要多次、頻繁的計(jì)算和調(diào)整這些屬性。

Autolayout
Autolayout 是蘋果本身提倡的技術(shù),在大部分情況下也能很好的提升開發(fā)效率,但是 Autolayout 對(duì)于復(fù)雜視圖來說常常會(huì)產(chǎn)生嚴(yán)重的性能問題。隨著視圖數(shù)量的增長(zhǎng),Autolayout 帶來的 CPU 消耗
會(huì)呈指數(shù)級(jí)上升。如果你不想手動(dòng)調(diào)整 frame 等屬性,你可以用一些工具方法替代
(比如常見的 left/right/top/bottom/width/height 快捷屬性),或者使用
ComponentKit、AsyncDisplayKit 等框架。

文摘出處 : http://www.itdecent.cn/p/f4adce56166f
感謝原作者 吳白

最后編輯于
?著作權(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)容

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