UI相關(guān)知識

標(biāo)題

一、UITableView相關(guān)

1.1妈橄、重用機(jī)制

代碼層

重用機(jī)制

重用示意圖

重用示意圖

1.2威始、數(shù)據(jù)源同步

資源競爭

解決方案

  • 并發(fā)訪問鼻吮、數(shù)據(jù)拷貝


    并發(fā)方案
  • 串行訪問


    串行方案

二、事件傳遞與視圖響應(yīng)鏈

見文章事件傳遞與視圖響應(yīng)鏈

三筹裕、圖像顯示原理

總體圖
分工

3.1醋闭、CPU工作

CPU工作
  • Layout
    UI布局文本計算
  • Display
    繪制
  • Prepare
    圖片編解碼
  • Commit
    提交位圖

3.2朝卒、GPU渲染管線

GPU渲染管線

四目尖、UI卡頓&掉幀

4.1、UI卡頓&掉幀的原因

問題1:UI卡頓&掉幀的原因是什么扎运?

UI卡頓&掉幀原因

解釋

  • 頁面滑動流暢性是60FPS瑟曲,指的是1s有60楨的畫面更新,這樣人眼看到的就是流暢效果豪治。所以1/60秒(16.7ms)就會產(chǎn)生一幀畫面洞拨。
  • 在這16.7ms之內(nèi),需要CPU负拟、GPU共同完成一幀的數(shù)據(jù)烦衣。
  • 如果CPU + GPU處理時間 > 16.7ms,在下一個VSync信號到來之前,這一楨畫面還沒有準(zhǔn)備好花吟,由此產(chǎn)生了掉幀秸歧,看到的效果就是卡頓
    總結(jié):在規(guī)定的16.7ms之內(nèi)衅澈, 在下一個VSync信號到來之前键菱,CPU、GPU并沒有完成畫面的合成今布,由此造成掉幀卡頓经备。

4.2、滑動優(yōu)化方案

4.2.1部默、CPU

CPU

主要是將上面工作侵蒙,全部放到子線程中去做,節(jié)省CPU時間傅蹂。

4.2.2纷闺、GPU

GPU

五、UI繪制原理&異步繪制

5.1份蝴、繪制原理步驟

繪制原理步驟
  • 調(diào)用[UIVIew setNeedsDisplay]并沒有發(fā)生視圖的調(diào)用工作急但,而是在之后的某一時機(jī)發(fā)生,會在當(dāng)前runloop即將結(jié)束的時候搞乏,才調(diào)用[CALayer dispaly]進(jìn)行圖形繪制波桩。

  • 系統(tǒng)繪制流程
    沒有重寫displayLayer方法,就用系統(tǒng)繪制流程请敦。

  • 異步繪制入口
    只有重寫了displayLayer方法镐躲,才會進(jìn)入異步繪制流程。

5.2侍筛、系統(tǒng)繪制流程

系統(tǒng)繪制流程

5.3萤皂、異步繪制

異步繪制
  • 實(shí)現(xiàn)了displayLayer方法,就可以進(jìn)行異步繪制匣椰。
  • 代理負(fù)責(zé)生成位圖裆熙。
  • 位圖賦值給layer.contents

異步繪制流程時序圖

時序圖

問題2:什么是異步繪制禽笑?

見上圖解入录。
簡單總結(jié):

  • 程序中某View調(diào)用[setNeedsDisplay]??[CALayer dispaly]??某View重寫displayLayer方法
  • displayLayer中生成位圖,當(dāng)前方法在子線程中進(jìn)行佳镜。
  • 在主隊列中僚稿,將位圖賦值給layer.contents
    此時蟀伸,就完成了UI控件的異步繪制過程蚀同。

六缅刽、離屏渲染

6.1、概念

概念

問題3:什么是離屏渲染蠢络?

  • 當(dāng)我們指定了UI視圖的某些屬性衰猛,標(biāo)記為在未預(yù)合成之前不能用于屏幕顯示的時候,就會觸發(fā)離屏渲染 刹孔。
  • 離屏渲染的概念起源于GPU層面


    GPU

問題4:離屏渲染何時會觸發(fā)啡省?

離屏渲染

問題5:為何要避免離屏渲染?

在觸發(fā)離屏渲染的時候芦疏,會觸發(fā)GPU工作量冕杠。而增加了GPU的工作量微姊,有可能導(dǎo)致CPU + GPU耗時超過16.7ms酸茴,從而導(dǎo)致卡頓。

七兢交、UI面試圖總結(jié)

問題6:系統(tǒng)的UI事件傳遞機(jī)制是怎樣的薪捍?

從事件傳遞流程回答,著重說hitTest:withEvent:pointInside:withEvent:配喳。

傳遞機(jī)制

問題7:使得UITableView滾動更流暢的方案和思路有哪些酪穿?

  • CPU

    CPU

    主要是將上面工作,全部放到子線程中去做晴裹,節(jié)省CPU時間被济。

  • GPU


    GPU

問題8:UIView與CALayer之間的關(guān)系是怎樣的?

  • CALayer為UIView提供顯示的內(nèi)容涧团,只負(fù)責(zé)內(nèi)容顯示只磷,不參與事件處理。
  • UIView作為CALayer的代理泌绣,提供交互操作钮追;負(fù)責(zé)處理觸摸事件,參與響應(yīng)鏈阿迈。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末元媚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子苗沧,更是在濱河造成了極大的恐慌刊棕,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件待逞,死亡現(xiàn)場離奇詭異鞠绰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)飒焦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門蜈膨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屿笼,“玉大人,你說我怎么就攤上這事翁巍÷恳唬” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵灶壶,是天一觀的道長肝断。 經(jīng)常有香客問我,道長驰凛,這世上最難降的妖魔是什么胸懈? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮恰响,結(jié)果婚禮上趣钱,老公的妹妹穿的比我還像新娘。我一直安慰自己胚宦,他們只是感情好首有,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著枢劝,像睡著了一般井联。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上您旁,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天烙常,我揣著相機(jī)與錄音,去河邊找鬼鹤盒。 笑死蚕脏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的昨悼。 我是一名探鬼主播蝗锥,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼率触!你這毒婦竟也來了终议?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤葱蝗,失蹤者是張志新(化名)和其女友劉穎穴张,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體两曼,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡皂甘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了悼凑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偿枕。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡璧瞬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出渐夸,到底是詐尸還是另有隱情嗤锉,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布墓塌,位于F島的核電站瘟忱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏苫幢。R本人自食惡果不足惜访诱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望韩肝。 院中可真熱鬧触菜,春花似錦、人聲如沸伞梯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谜诫。三九已至,卻和暖如春攻旦,著一層夾襖步出監(jiān)牢的瞬間喻旷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工牢屋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留且预,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓烙无,卻偏偏與公主長得像锋谐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子截酷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容