iOSUI视图面试及原理总结
摘要:
1、UITableViewCell的重用機制描述一下?
2、UITableView相關的數據源同步問題,即如何在tableview解決多線程情況下,數據的處理?
3、是否遇到過卡頓和掉幀的問題,如何解決的,為什么出現卡頓和掉幀的問題?
4、繪制原理&異步繪制、什么是離屏渲染
5、圖像顯示的原理描述一下
6、iOS中的事件傳遞流程和視圖響應流程
正問:
一、UITableViewCell的重用機制
在開發過程中,
- (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier; - (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0);有這兩個方法調起UITableViewCell方的重用機制,在tableview新建的時候,會新建一個復用池viewreusepool,這個復用池在oc底層可能是一個隊列,保存著當前cell.pool中的復用標識符就是reuseIdentifier,標識著不同種類的cell,所以當我們調用dequeueReusableCellWithIdentifier時,會通過當前reuseIdentifier查找到對應的cell,也就是展示的原型。
在創建tableview的時候,會創建一個空的viewreusepool,然后在tableview內部對pool進行管理,一般有兩種用法,一種是取出一個空的cell的時候再去創建新的cell,另外一種是預先注冊cell,之后再直接從復用池取出來用,不需要初始化.
對于第一種用法:第一次調用tableView:cellForRowAtIndexPath由于復用池是空的,會首先創建cell添加到復用池中,第二次調用,當前復用池中有一個cell,這時候因為talbeview上面還未填滿,而且復用池的唯一的那個cell已經在使用了,所以取出來的cell仍然為nil,于是繼續新建一個cell并返回,復用池再添加一個cell,當前復用池中cell的個數為2.假如當前tableview只能容納5個cell.那么在滾動到第6個cell時,從tableview的復用池取出來的cell將會是第0行的那個cell.以此類推,當滾動到第7行時,會從復用池取出來第1行的那個cell. 另外,此時不再繼續往復用池添加新的cell.
二、uitableview的數據源同步問題
如何解決在tableview中多線程情況下數據同步的問題?
有兩種情況一:1、并行訪問,數據拷貝,2、串行訪問。
三、是否遇到過卡頓和掉幀的問題,如何解決的,為什么出現卡頓和掉幀的問題
首先卡頓是在規定的的16,7ms之內,下一幀sync信號到來之前,并沒有cpu和gpu共同完成下一幀頁面的合成,于是就會造成卡頓和掉幀。。
滑動優化方案:cpu:1、處理對象的創建、調整、銷毀工作;2、欲排版(布局計算、文本計算);3、欲渲染(文本等異步繪制、圖片解碼等)gpu:1、紋理渲染;2、視圖混合
四、繪制原理&異步繪制
繪制原理:
?
GPU屏幕渲染有以下兩種方式:
1、當前屏幕渲染(On-Screen Rendering)
指的是在當前屏幕緩沖區內進行渲染
2、離屏渲染(Off-Screen Rendering)
指的是在當前屏幕緩沖區以外新開辟的一個緩沖區進行渲染操作
離屏渲染:
當我們處理圖層的屬性在被指定為未被預合成之前不能直接在屏幕上顯示,就觸發了離屏渲染,離屏渲染的概念起源于cpu層面,值得是cpu在當前屏幕緩沖區以外新開辟一個緩沖區進行渲染操作。
離屏渲染何時被觸發?1、圓角(當和maskToBounds一起使用時,單獨的圓角不觸發);2、圖層蒙版;3、陰影;4、光柵化;5、漸變
?
特殊的離屏渲染:CPU渲染?如果我們重寫了drawRect方法,并且使用任何Core Graphics的技術進行了繪制操作,就涉及到了CPU渲染。整個渲染過程由CPU在App內 同步地完成,渲染得到的bitmap最后再交由GPU用于顯示。
?
要盡量避免使用離屏渲染:1、上下文切換,gpu需要額外的開銷;2、創建新的渲染緩沖區,內存消耗;
高級回答:觸發離屏渲染會增加gpu的工作量,而增加了gpu的工作量很有可能導致cpu和gpu的工作總耗時超過了15.67ms,從而造成頁面的卡頓和掉幀。
轉載于:https://www.cnblogs.com/codingStorys/p/9442016.html
總結
以上是生活随笔為你收集整理的iOSUI视图面试及原理总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 招商银行信用卡申请条件
- 下一篇: python-模块入门二(模块循环导入,