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、并行访问,数据拷贝

猜你喜欢

转载自www.cnblogs.com/codingStorys/p/9442016.html