iOS性能優(yōu)化(三)頁面Push卡頓優(yōu)化

上一篇:iOS性能優(yōu)化(二)UITableView自動(dòng)計(jì)算Cell高度思路

在了解這個(gè)問題之前蜂林,我們先復(fù)習(xí)一下:iOS 視圖生命周期

initWithCoder:(NSCoder *)aDecoder:使用Storyboard或者Xib創(chuàng)建View的的時(shí)候

loadView:加載view的時(shí)候

viewDidLoad:view加載完畢的時(shí)候

viewWillAppear:控制器的view將要顯示的時(shí)候

viewWillLayoutSubviews:控制器的view將要布局子控件的時(shí)候

viewDidLayoutSubviews:控制器的view布局子控件完成的時(shí)候

viewDidAppear:控制器的view完全顯示的時(shí)候

viewWillDisappear:控制器的view即將消失的時(shí)候

viewDidDisappear:控制器的view完全消失的時(shí)候

deinit:控制器銷毀的時(shí)候

首先挪钓,我們新建一個(gè)空的工程娇跟,在工程中添加兩個(gè)控制器:頁面01饭聚,頁面02糖权。然后重寫以下方法:

override func loadView() {

super.loadView()

print("--- 頁面01 - loadView 創(chuàng)建View ---")

}

override func viewDidLoad() {

super.viewDidLoad()

print("--- 頁面01 - viewDidLoad 初始化完畢 ---")

}

override func viewWillAppear(_ animated: Bool) {

print("--- 頁面01 - viewWillAppear 將要顯示 ---")

}

override func viewDidAppear(_ animated: Bool) {

print("--- 頁面01 - viewDidAppear 顯示 ---")

}

override func viewWillDisappear(_ animated: Bool) {

print("--- 頁面01 - viewWillDisappear 將要消失 ---")

}

override func viewDidDisappear(_ animated: Bool) {

print("--- 頁面01 - viewDidDisappear 消失 ---")

}

deinit {

print("--- 頁面01 - deinit 銷毀 ---")

}

頁面02類似举畸,也是重寫以上方法箕别。

接下來是重點(diǎn)了:

1和簸、啟動(dòng)工程彭雾,終端日志:

---頁面01 - loadView創(chuàng)建View ---

---頁面01 - viewDidLoad初始化完畢---

---頁面01 - viewWillAppear將要顯示---

---頁面01 - viewDidAppear顯示---

2、頁面01 Push到 頁面02锁保,終端日志:

---頁面02 - loadView創(chuàng)建View ---

---頁面02 - viewDidLoad初始化完畢---

---頁面01 - viewWillDisappear將要消失---

---頁面02 - viewWillAppear將要顯示---

---頁面01 - viewDidDisappear消失---

分析:

在頁面02顯示之前(---頁面02 - viewWillAppear將要顯示---)薯酝,分別調(diào)用了三個(gè)方法,如果在這三個(gè)方法中有耗時(shí)操作爽柒,那么就會(huì)造成卡頓吴菠。

我們修改一下代碼,在頁面01中加入耗時(shí)操作:

override func viewWillDisappear(_ animated: Bool) {

print("--- 頁面01 - viewWillDisappear 將要消失 ---")

sleep(3)

}

此時(shí)由頁面01Push到頁面02浩村,就會(huì)卡頓(可以看到做葵,按鈕已經(jīng)響應(yīng)了事件,但頁面02沒有Push過來)心墅。

卡頓

然后我們把耗時(shí)的代碼修改到:

override func viewDidDisappear(_animated:Bool) {

print("--- 頁面01 - viewDidDisappear 消失 ---")

sleep(3)

}

再次由頁面01Push到頁面02酿矢,不會(huì)卡頓。

流暢

3怎燥、頁面02Pop回頁面01瘫筐,終端日志:

---頁面02 - viewWillDisappear將要消失---

---頁面01 - viewWillAppear將要顯示---

---頁面02 - viewDidDisappear消失---

---頁面01 - viewDidAppear顯示---

---頁面02 - deinit銷毀---

分析:

在頁面01再次顯示的時(shí)候(---頁面01 - viewWillAppear將要顯示---),會(huì)調(diào)用頁面02的viewWillDisappear方法铐姚,如果在這個(gè)方法中有耗時(shí)操作策肝,就會(huì)引起Pop時(shí)卡頓。

總結(jié):

在開發(fā)時(shí),不要將耗時(shí)操作放在頁面顯示之前調(diào)用驳糯。比如:如果一個(gè)頁面消失時(shí)需要執(zhí)行一些操作篇梭,可以放在viewDidDisappear方法中執(zhí)行,不要放在viewWillDisappear中酝枢。

Android開發(fā)中恬偷,如果在主線有超過5秒的耗時(shí)操作,就會(huì)導(dǎo)致 Force Close帘睦。雖然iOS沒有這種機(jī)制袍患,系統(tǒng)不會(huì)殺掉我們的應(yīng)用,但如果有這種情況竣付,建議放在子線程中去執(zhí)行诡延。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市古胆,隨后出現(xiàn)的幾起案子肆良,更是在濱河造成了極大的恐慌,老刑警劉巖逸绎,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惹恃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡棺牧,警方通過查閱死者的電腦和手機(jī)巫糙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颊乘,“玉大人参淹,你說我怎么就攤上這事》η模” “怎么了浙值?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)檩小。 經(jīng)常有香客問我开呐,道長(zhǎng),這世上最難降的妖魔是什么识啦? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮神妹,結(jié)果婚禮上颓哮,老公的妹妹穿的比我還像新娘。我一直安慰自己鸵荠,他們只是感情好冕茅,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般姨伤。 火紅的嫁衣襯著肌膚如雪哨坪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天乍楚,我揣著相機(jī)與錄音当编,去河邊找鬼。 笑死徒溪,一個(gè)胖子當(dāng)著我的面吹牛忿偷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播臊泌,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼鲤桥,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了渠概?” 一聲冷哼從身側(cè)響起茶凳,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎播揪,沒想到半個(gè)月后贮喧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剪芍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年塞淹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罪裹。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饱普,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出状共,到底是詐尸還是另有隱情套耕,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布峡继,位于F島的核電站冯袍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏碾牌。R本人自食惡果不足惜康愤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舶吗。 院中可真熱鬧征冷,春花似錦、人聲如沸誓琼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叔收,卻和暖如春齿穗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背饺律。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工窃页, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蓝晒。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓腮出,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親芝薇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胚嘲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345