日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOSUI视图面试及原理总结

發(fā)布時間:2024/10/12 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOSUI视图面试及原理总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

摘要:

  1、UITableViewCell的重用機(jī)制描述一下?

  2、UITableView相關(guān)的數(shù)據(jù)源同步問題,即如何在tableview解決多線程情況下,數(shù)據(jù)的處理?

  3、是否遇到過卡頓和掉幀的問題,如何解決的,為什么出現(xiàn)卡頓和掉幀的問題?

  4、繪制原理&異步繪制、什么是離屏渲染

  5、圖像顯示的原理描述一下

  6、iOS中的事件傳遞流程和視圖響應(yīng)流程

正問:

一、UITableViewCell的重用機(jī)制

在開發(fā)過程中,

- (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier; - (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0);
有這兩個方法調(diào)起UITableViewCell方的重用機(jī)制,在tableview新建的時候,會新建一個復(fù)用池viewreusepool,這個復(fù)用池在oc底層可能是一個隊列,保存著當(dāng)前cell.pool中的復(fù)用標(biāo)識符就是reuseIdentifier,標(biāo)識著不同種類的cell,所以當(dāng)我們調(diào)用dequeueReusableCellWithIdentifier時,會通過當(dāng)前reuseIdentifier查找到對應(yīng)的cell,也就是展示的原型。
在創(chuàng)建tableview的時候,會創(chuàng)建一個空的
viewreusepool,然后在tableview內(nèi)部對pool進(jìn)行管理,一般有兩種用法,一種是取出一個空的cell的時候再去創(chuàng)建新的cell,另外一種是預(yù)先注冊cell,之后再直接從復(fù)用池取出來用,不需要初始化.
對于第一種用法:第一次調(diào)用tableView:cellForRowAtIndexPath由于復(fù)用池是空的,會首先創(chuàng)建cell添加到復(fù)用池中,第二次調(diào)用,當(dāng)前復(fù)用池中有一個cell,這時候因為talbeview上面還未填滿,而且復(fù)用池的唯一的那個cell已經(jīng)在使用了,所以取出來的cell仍然為nil,于是繼續(xù)新建一個cell并返回,復(fù)用池再添加一個cell,當(dāng)前復(fù)用池中cell的個數(shù)為2.假如當(dāng)前tableview只能容納5個cell.那么在滾動到第6個cell時,從tableview的復(fù)用池取出來的cell將會是第0行的那個cell.以此類推,當(dāng)滾動到第7行時,會從復(fù)用池取出來第1行的那個cell. 另外,此時不再繼續(xù)往復(fù)用池添加新的cell.
二、uitableview的數(shù)據(jù)源同步問題
如何解決在tableview中多線程情況下數(shù)據(jù)同步的問題?
有兩種情況一:1、并行訪問,數(shù)據(jù)拷貝,2、串行訪問。
三、是否遇到過卡頓和掉幀的問題,如何解決的,為什么出現(xiàn)卡頓和掉幀的問題
首先卡頓是在規(guī)定的的16,7ms之內(nèi),下一幀sync信號到來之前,并沒有cpu和gpu共同完成下一幀頁面的合成,于是就會造成卡頓和掉幀。。
滑動優(yōu)化方案:cpu:1、處理對象的創(chuàng)建、調(diào)整、銷毀工作;2、欲排版(布局計算、文本計算);3、欲渲染(文本等異步繪制、圖片解碼等)gpu:1、紋理渲染;2、視圖混合
四、繪制原理&異步繪制
繪制原理:

?

GPU屏幕渲染有以下兩種方式:

1、當(dāng)前屏幕渲染(On-Screen Rendering)

指的是在當(dāng)前屏幕緩沖區(qū)內(nèi)進(jìn)行渲染

2、離屏渲染(Off-Screen Rendering)

指的是在當(dāng)前屏幕緩沖區(qū)以外新開辟的一個緩沖區(qū)進(jìn)行渲染操作

離屏渲染:

當(dāng)我們處理圖層的屬性在被指定為未被預(yù)合成之前不能直接在屏幕上顯示,就觸發(fā)了離屏渲染,離屏渲染的概念起源于cpu層面,值得是cpu在當(dāng)前屏幕緩沖區(qū)以外新開辟一個緩沖區(qū)進(jìn)行渲染操作。

離屏渲染何時被觸發(fā)?1、圓角(當(dāng)和maskToBounds一起使用時,單獨的圓角不觸發(fā));2、圖層蒙版;3、陰影;4、光柵化;5、漸變

?

特殊的離屏渲染:CPU渲染?如果我們重寫了drawRect方法,并且使用任何Core Graphics的技術(shù)進(jìn)行了繪制操作,就涉及到了CPU渲染。整個渲染過程由CPU在App內(nèi) 同步地完成,渲染得到的bitmap最后再交由GPU用于顯示。

?

要盡量避免使用離屏渲染:1、上下文切換,gpu需要額外的開銷;2、創(chuàng)建新的渲染緩沖區(qū),內(nèi)存消耗;

高級回答:觸發(fā)離屏渲染會增加gpu的工作量,而增加了gpu的工作量很有可能導(dǎo)致cpu和gpu的工作總耗時超過了15.67ms,從而造成頁面的卡頓和掉幀。

轉(zhuǎn)載于:https://www.cnblogs.com/codingStorys/p/9442016.html

總結(jié)

以上是生活随笔為你收集整理的iOSUI视图面试及原理总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。