UI視圖相關(guān)面試問題

注意:本文主講UI相關(guān)面試問題,包括UITableView相關(guān)、事件傳遞&視圖相應(yīng)、圖像顯示原理、卡頓&掉幀、繪制原理&異步繪制、離屏渲染。

一、UITableView相關(guān)

1、重用機(jī)制

屏幕快照 2019-10-25 上午10.24.52.png
屏幕快照 2019-10-25 上午10.26.52.png

2、數(shù)據(jù)源同步
(1)、數(shù)據(jù)源同步問題

數(shù)據(jù)源同步問題

(2)、數(shù)據(jù)源同步解決方案
1>、并發(fā)訪問、數(shù)據(jù)拷貝

并發(fā)訪問、數(shù)據(jù)拷貝.png

2>、串行訪問

屏幕快照 2019-10-25 上午10.50.22.png

二、事件傳遞&視圖相應(yīng)

1、UIView和CALayer的關(guān)系
UIView為其提供內(nèi)容,以及負(fù)責(zé)處理觸摸等事件,參與響應(yīng)鏈。
CALayer負(fù)責(zé)顯示內(nèi)容contents

屏幕快照 2019-10-25 上午11.09.53.png

三、圖像顯示原理

屏幕快照 2019-10-25 上午11.30.22.png
屏幕快照 2019-10-25 上午11.31.30.png

1、CPU工作
Layout(UI布局、文本計(jì)算); Display(繪制,drawRect方法);Prepare(圖片編解碼); Commit(提交位圖)。
2、GPU渲染管線(openGL)
頂點(diǎn)著色、圖元裝配、光柵化、片段著色、片段處理。

四、卡頓&掉幀

1、原因

屏幕快照 2019-10-25 上午11.49.26.png

2、優(yōu)化方案
(1)、CPU
對象創(chuàng)建、調(diào)整、銷毀;
預(yù)排版(布局計(jì)算、文本計(jì)算);
預(yù)渲染(文本等異步繪制,圖片編解碼等)。
(2)、GPU
紋理渲染(離屏渲染);
視圖混合(視圖層級復(fù)雜度,GPU需要做每個視圖的合成)。

五、繪制原理&異步繪制

屏幕快照 2019-10-25 下午12.07.30.png

一、系統(tǒng)繪制流程

屏幕快照 2019-10-25 下午12.09.21.png

二、異步繪制
-[layer.delegate displayLayer:]
代理負(fù)責(zé)生成對應(yīng)的bitmap
設(shè)置該bitmap作為layer.contents屬性的值

屏幕快照 2019-10-25 下午12.11.57.png

六、離屏渲染

1、啥是離屏渲染?
當(dāng)設(shè)置某一些UI視圖的圖層屬性時,如果未被預(yù)合成之前不能用于當(dāng)前屏幕直接顯示的時候,就會觸發(fā)離屏渲染。而離屏渲染的概念起源于GPU層面,指的是GPU在當(dāng)前屏幕緩沖區(qū)以外新開辟一個緩沖區(qū)進(jìn)行渲染操作。
當(dāng)屏渲染:指的是GPU的渲染操作是在當(dāng)前用于顯示的屏幕緩存區(qū)中進(jìn)行。
2、何時會觸發(fā)?
(1)、圓角(當(dāng)和maskToBounds一起使用時)
(2)、圖層蒙版
(3)、陰影
(4)、光柵化
3、為何要避免?
(1)、會增加GPU的工作量,會導(dǎo)致CPU和GPU的工作總耗時超過16.7毫秒,會導(dǎo)致UI的卡頓和掉幀。
(2)、創(chuàng)建新的渲染緩沖區(qū),會內(nèi)存開銷。
(3)、上下文切換,會導(dǎo)致GPU額外開銷。

最后總結(jié)點(diǎn)東西吧,面試官經(jīng)常問的問題有:

1、系統(tǒng)的UI事件傳遞機(jī)制是咋樣的?
2、使UITableView滾動更流暢的方案或思路都有哪些?
3、什么是離屏渲染?
4、UIView和CALayer之間的關(guān)系是咋樣的?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,666評論 1 32
  • 面向?qū)ο蟮娜筇匦裕悍庋b、繼承、多態(tài) OC內(nèi)存管理 _strong 引用計(jì)數(shù)器來控制對象的生命周期。 _weak...
    運(yùn)氣不夠技術(shù)湊閱讀 1,222評論 0 10
  • http://blog.csdn.net/guojin08/article/details/60773120 屏幕...
    pony23閱讀 1,038評論 0 2
  • 前言 變量:就是給內(nèi)存地址取一個別名; 1. 函數(shù)指針 函數(shù)指針用的最多的就是 回調(diào),在 java中一般是通...
    世道無情閱讀 890評論 1 1

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