移動(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
感謝原作者 吳白