UITableView相關(guān)
一摇庙、重用機(jī)制
1勋锤、iOS如何實(shí)現(xiàn)cell的重用機(jī)制?
-
A1-A7
使用相同的identifer
羊壹,當(dāng)tableView
向上滑動蓖宦,A1
劃出頁面后,就被放入了重用池油猫。 - 當(dāng)
A7
即將展示時稠茂,首先會在重用池中查看時候有相同identifer
的cell
可以被重用,如果有則直接取出使用情妖,若無則創(chuàng)建一個新的cell
睬关。
2、如何手動實(shí)現(xiàn)重用機(jī)制毡证?
-
ViewReusePool
類的聲明
-
ViewReusePool
類的實(shí)現(xiàn)
-
dequeueReusableView
函數(shù)實(shí)現(xiàn)
-
addUsingView:
函數(shù)實(shí)現(xiàn)
-
reset
函數(shù)實(shí)現(xiàn)
-
ViewReusePool
類的使用
二电爹、數(shù)據(jù)源同步問題
- 當(dāng)數(shù)據(jù)源在
主線程
中有刪除
操作,同時在子線程
上又有加載更多
數(shù)據(jù)的操作時情竹,就會出現(xiàn)數(shù)據(jù)源同步問題
藐不。
1、數(shù)據(jù)源同步解決方案
a秦效、并發(fā)訪問雏蛮、數(shù)據(jù)拷貝
-
子線程
返回主線程
的數(shù)據(jù)中,仍然包含刪除的這一條數(shù)據(jù)阱州。 在
主線程
進(jìn)行刪除操作時挑秉,將操作記錄下來。之后在子線程
同步數(shù)據(jù)時苔货,同步刪除操作犀概。
b、串行訪問
- 將
子線程
的數(shù)據(jù)同步和主線程
的刪除操作全部放入一個串行隊(duì)列
中執(zhí)行夜惭。 -
刪除動作可能會有延時姻灶。
事件傳遞&視圖相應(yīng)
一、UIView和CALayer
1诈茧、UIView和CALayer的關(guān)系和區(qū)別产喉?
a、關(guān)系
-
UIView
對象中的layer
指向一個CALayer
變量 -
UIView
對象中的backgroundColor
屬性敢会,是對CALayer
同名屬性的封裝曾沈。 -
UIView
展示部分是由CALayer
中的contents
來決定。contents
對應(yīng)的backing store
其實(shí)是一個bitmap
的位圖鸥昏。
b塞俱、區(qū)別
-
UIView
為其提供內(nèi)容,以及負(fù)責(zé)處理觸摸等事件吏垮,參與響應(yīng)鏈障涯。 -
CALayer
負(fù)責(zé)顯示內(nèi)容contents
罐旗。
2、為什么UIView負(fù)責(zé)觸摸事件唯蝶,CALayer負(fù)責(zé)顯示尤莺?
- 設(shè)計模式,
單一職責(zé)
原則生棍。
二、事件傳遞與視圖響應(yīng)鏈
1媳谁、當(dāng)點(diǎn)擊View C2區(qū)域涂滴,系統(tǒng)是如何找到響應(yīng)視圖的呢?
a晴音、事件傳遞的流程
- 當(dāng)用戶點(diǎn)擊屏幕柔纵,事件會被
UIApplication
接受,并傳遞給UIWindow
锤躁。 -
UIWindow
調(diào)用hitTest
函數(shù)搁料,在hitTest
內(nèi)調(diào)用pointInside
判斷事件是否在該視圖內(nèi)。 - 若為
false
,則返回該視圖系羞,事件傳遞流程結(jié)束郭计。 - 若為
true
,則可倒敘遍歷
該視圖的子視圖
椒振,并調(diào)用子視圖
的hitTest
函數(shù)昭伸。 - 找到最終
hitTest
為true
的子視圖
,并依次返回澎迎,事件傳遞流程結(jié)束庐杨。
b、hitTest
系統(tǒng)內(nèi)部實(shí)現(xiàn)
- 在當(dāng)前視圖子視圖調(diào)用
hitTest
函數(shù)前夹供,需要將當(dāng)前坐標(biāo)轉(zhuǎn)換為子視圖
中的坐標(biāo)灵份。
2、如何只讓方形圖片的圓形區(qū)域接受事件響應(yīng)哮洽?
- 重寫視圖的
pointInside
函數(shù)填渠,使得點(diǎn)擊區(qū)域在圓形范圍內(nèi)返回true
,否則返回false
。
3袁铐、視圖響應(yīng)流程
圖像顯示原理
卡頓&掉幀
繪制原理&異步繪制
離屏渲染
//未完待續(xù)...
結(jié)交人脈
最后推薦個我的iOS交流群:789143298
'有一個共同的圈子很重要揭蜒,結(jié)識人脈!里面都是iOS開發(fā)剔桨,全棧發(fā)展屉更,歡迎入駐,共同進(jìn)步H髯骸(群內(nèi)會免費(fèi)提供一些群主收藏的免費(fèi)學(xué)習(xí)書籍資料以及整理好的幾百道面試題和答案文檔I馨ァ)
- ——點(diǎn)擊加入:iOS開發(fā)交流群
以下資料在群文件可自行下載
不管你是小白還是大牛歡迎入駐 侣诵,分享BAT,阿里面試題蹄葱、面試經(jīng)驗(yàn),討論技術(shù)隐轩, 大家一起交流學(xué)習(xí)成長!2吃纭职车!
作者:逍遙歸來
鏈接:https://juejin.cn/post/6899772676794122253