1. UIView
和 CALayer
是什么關(guān)系闸婴?
UIView
:用戶(hù)交互栅迄、界面展示私杜。真正繪制的界面的類(lèi)是Layer
号俐。CALayer
屬于QuartzCore
框架(跨平臺(tái)的)泌豆。mac os
:交互上面:APPKIT
,通過(guò)鼠標(biāo)鍵盤(pán)交互萧落,NSView
践美。相同點(diǎn):同一種繪制方式(CALayer
)。
-
UIView
和CALayer
算是相互補(bǔ)充的關(guān)系找岖。 -
UIView
=CALayer.delegate
-
UIView
: 負(fù)責(zé)用戶(hù)的交互事件陨倡。 -
CALayer
: 負(fù)責(zé)圖像和動(dòng)畫(huà)的渲染
總結(jié):UIView
負(fù)責(zé)處理用戶(hù)交互,CALayer
負(fù)責(zé)繪制內(nèi)容许布,每個(gè)View
都有一個(gè)Layer
兴革。我們?cè)L問(wèn)和設(shè)置的這些負(fù)責(zé)顯示的屬性實(shí)際上就是訪問(wèn)和設(shè)置了Layer
對(duì)應(yīng)的屬性,只不過(guò)UIView
把它封裝了起來(lái)蜜唾。
- 為什么要基于
UIView
和CAlayer
提供2個(gè)平行的層級(jí)關(guān)系杂曲?
1、職責(zé)分離:UIView
處理UI
交互袁余,CALayer
處理內(nèi)容繪制和動(dòng)畫(huà)擎勘;
2、代碼公用:在iOS
和macOS 2
個(gè)平臺(tái)上颖榜,事件和UI 交互有許多不同點(diǎn)棚饵,基于觸控和鼠標(biāo)鍵盤(pán)交互有本質(zhì)的區(qū)別;故針對(duì)不同的平臺(tái)掩完,UI 交互這些代碼做不同的處理噪漾,而內(nèi)容繪制和動(dòng)畫(huà)這些代碼可以復(fù)用。
2. LoadView
方法了解嗎且蓬?
- 自定義控制器的
View
欣硼。可以在這個(gè)方法中做一些個(gè)性化的設(shè)置
2. 控制器 View
的生命周期恶阴,一旦收到內(nèi)存警告會(huì)如何處理诈胜?
當(dāng)系統(tǒng)內(nèi)存告急時(shí)豹障,會(huì)接收到didReceiveMemoryWarning
。 這是屬于 ViewController
的方法耘斩,當(dāng)ViewController
接收到didReceiveMemoryWarning
沼填,首先會(huì)判斷當(dāng)前的 ViewController
是否還顯示在window
上,如果不在就會(huì)移除當(dāng)前的ViewController
括授,銷(xiāo)毀ViewController
上面的子控件,并執(zhí)行 ViewDidUnload
方法岩饼。
3. setNeedsDisplay
和 layoutIfNeeded
兩者是什么關(guān)系荚虚?
setNeedsDisplay
是給當(dāng)前的視圖做了標(biāo)記。
layoutIfNeeded
查找是否有標(biāo)記籍茧,如果有標(biāo)記及立刻刷新版述。
只有這二者合起來(lái)使用,才會(huì)起到立刻刷新的效果寞冯。