iOSUI视图面试及原理总结
Posted codingstorys
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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、并行访问,数据拷贝
以上是关于iOSUI视图面试及原理总结的主要内容,如果未能解决你的问题,请参考以下文章