区块链技术博客
www.b2bchain.cn

UI面试要点求职学习资料

D0b2wT.gif

本文介绍了UI面试要点求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

  • 事件分发机制及响应者链
    • 事件分发机制
    • 响应者链原理
  • VC生命周期
  • 列表优化技巧
    • cell重用

事件分发机制及响应者链

事件分发机制

iOS 检测到手指触摸 (Touch) 操作时会将其打包成一个 UIEvent 对象,并放入当前活动Application的事件队列,UIApplication 会从事件队列中取出触摸事件并传递给单例的 UIWindow 来处理,UIWindow 对象首先会使用 hitTest:withEvent:方法寻找此次Touch操作初始点所在的视图(View),即需要将触摸事件传递给其处理的视图,这个过程称之为 hit-test view。
hitTest:withEvent:方法的处理流程如下:

  • 首先调用当前视图的 pointInside:withEvent: 方法判断触摸点是否在当前视图内;
  • 若返回 NO, 则 hitTest:withEvent: 返回 nil,若返回 YES, 则向当前视图的所有子视图 (subviews) 发送 hitTest:withEvent: 消息,所有子视图的遍历顺序是从最顶层视图一直到到最底层视图(后加入的先遍历),直到有子视图返回非空对象或者全部子视图遍历完毕;
  • 若第一次有子视图返回非空对象,则 hitTest:withEvent: 方法返回此对象,处理结束;
  • 如所有子视图都返回空,则 hitTest:withEvent: 方法返回自身 (self)。
    流程图如下:
    UI面试要点

响应者链原理

iOS的事件分发机制是为了找到第一响应者,事件的处理机制叫做响应者链原理。
所有事件响应的类都是 UIResponder 的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次获得响应事件消息的机会。当发生事件时,事件首先被发送给第一响应者,第一响应者往往是事件发生的视图,也就是用户触摸屏幕的地方。事件将沿着响应者链一直向下传递,直到被接受并做出处理。一般来说,第一响应者是个视图对象或者其子类对象,当其被触摸后事件被交由它处理,如果它不处理,就传递给它的父视图(superview)对象(如果存在)处理,如果没有父视图,事件就会被传递给它的视图控制器对象 ViewController(如果存在),接下来会沿着顶层视图(top view)到窗口(UIWindow 对象)再到程序(UIApplication 对象)。如果整个过程都没有响应这个事件,该事件就被丢弃。一般情况下,在响应者链中只要有对象处理事件,事件就停止传递。
一个典型的事件响应路线如下:
First Responser –> 父视图–>VC->The Window –> The Application –> nil(丢弃)
我们可以通过 [responder nextResponder] 找到当前 responder 的下一个 responder,持续这个过程到最后会找到 UIApplication 对象。

VC生命周期

考察viewDidLoad、viewWillAppear、ViewDidAppear等方法的执行顺序。
假设现在有一个 AViewController(简称 Avc) 和 BViewController (简称 Bvc),通过 navigationController 的push 实现 Avc 到 Bvc 的跳转,调用顺序如下:
1、A viewDidLoad
2、A viewWillAppear
3、A viewDidAppear
4、B viewDidLoad
5、A viewWillDisappear
6、B viewWillAppear
7、A viewDidDisappear
8、B viewDidAppear
如果再从 Bvc 跳回 Avc,调用顺序如下:
1、B viewWillDisappear
2、A viewWillAppear
3、B viewDidDisappear
4、A viewDidAppear

列表优化技巧

cell重用

  • cell重用原理
    它的原理是,根据cell高度和tableView高度,确定界面上能显示几个cell。例如界面上只能显示5个cell,那么这5个cell都是单独创建的而不是根据重用标识符去缓存中找到的。当你开始滑动tableView时,第1个cell开始渐渐消失,第6个cell开始显示的时候,会创建第6个cell,而不是用第1个cell去显示在第6个cell位置,因为有可能第1个cell显示了一半,而第6个cell也显示了一半,这个时候第一个cell还没有被放入缓存中,缓存中没有可利用的cell。所以实际上创建了6个cell。当滑动tableView去显示第7个cell的时候,这时缓存中已经有第一个cell,那么系统会直接从缓存中拿出来而不是创建,这样就算有100个cell的数据需要显示,实际也只消耗6个cell的内存。
  • 根据cell的布局差异用不同的重用ID来进行cell的重用。
  • 事件分发机制及响应者链
    • 事件分发机制
    • 响应者链原理
  • VC生命周期
  • 列表优化技巧
    • cell重用

事件分发机制及响应者链

事件分发机制

iOS 检测到手指触摸 (Touch) 操作时会将其打包成一个 UIEvent 对象,并放入当前活动Application的事件队列,UIApplication 会从事件队列中取出触摸事件并传递给单例的 UIWindow 来处理,UIWindow 对象首先会使用 hitTest:withEvent:方法寻找此次Touch操作初始点所在的视图(View),即需要将触摸事件传递给其处理的视图,这个过程称之为 hit-test view。
hitTest:withEvent:方法的处理流程如下:

  • 首先调用当前视图的 pointInside:withEvent: 方法判断触摸点是否在当前视图内;
  • 若返回 NO, 则 hitTest:withEvent: 返回 nil,若返回 YES, 则向当前视图的所有子视图 (subviews) 发送 hitTest:withEvent: 消息,所有子视图的遍历顺序是从最顶层视图一直到到最底层视图(后加入的先遍历),直到有子视图返回非空对象或者全部子视图遍历完毕;
  • 若第一次有子视图返回非空对象,则 hitTest:withEvent: 方法返回此对象,处理结束;
  • 如所有子视图都返回空,则 hitTest:withEvent: 方法返回自身 (self)。
    流程图如下:
    UI面试要点

响应者链原理

iOS的事件分发机制是为了找到第一响应者,事件的处理机制叫做响应者链原理。
所有事件响应的类都是 UIResponder 的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次获得响应事件消息的机会。当发生事件时,事件首先被发送给第一响应者,第一响应者往往是事件发生的视图,也就是用户触摸屏幕的地方。事件将沿着响应者链一直向下传递,直到被接受并做出处理。一般来说,第一响应者是个视图对象或者其子类对象,当其被触摸后事件被交由它处理,如果它不处理,就传递给它的父视图(superview)对象(如果存在)处理,如果没有父视图,事件就会被传递给它的视图控制器对象 ViewController(如果存在),接下来会沿着顶层视图(top view)到窗口(UIWindow 对象)再到程序(UIApplication 对象)。如果整个过程都没有响应这个事件,该事件就被丢弃。一般情况下,在响应者链中只要有对象处理事件,事件就停止传递。
一个典型的事件响应路线如下:
First Responser –> 父视图–>VC->The Window –> The Application –> nil(丢弃)
我们可以通过 [responder nextResponder] 找到当前 responder 的下一个 responder,持续这个过程到最后会找到 UIApplication 对象。

VC生命周期

考察viewDidLoad、viewWillAppear、ViewDidAppear等方法的执行顺序。
假设现在有一个 AViewController(简称 Avc) 和 BViewController (简称 Bvc),通过 navigationController 的push 实现 Avc 到 Bvc 的跳转,调用顺序如下:
1、A viewDidLoad
2、A viewWillAppear
3、A viewDidAppear
4、B viewDidLoad
5、A viewWillDisappear
6、B viewWillAppear
7、A viewDidDisappear
8、B viewDidAppear
如果再从 Bvc 跳回 Avc,调用顺序如下:
1、B viewWillDisappear
2、A viewWillAppear
3、B viewDidDisappear
4、A viewDidAppear

列表优化技巧

cell重用

  • cell重用原理
    它的原理是,根据cell高度和tableView高度,确定界面上能显示几个cell。例如界面上只能显示5个cell,那么这5个cell都是单独创建的而不是根据重用标识符去缓存中找到的。当你开始滑动tableView时,第1个cell开始渐渐消失,第6个cell开始显示的时候,会创建第6个cell,而不是用第1个cell去显示在第6个cell位置,因为有可能第1个cell显示了一半,而第6个cell也显示了一半,这个时候第一个cell还没有被放入缓存中,缓存中没有可利用的cell。所以实际上创建了6个cell。当滑动tableView去显示第7个cell的时候,这时缓存中已经有第一个cell,那么系统会直接从缓存中拿出来而不是创建,这样就算有100个cell的数据需要显示,实际也只消耗6个cell的内存。
  • 根据cell的布局差异用不同的重用ID来进行cell的重用。
  • 事件分发机制及响应者链
    • 事件分发机制
    • 响应者链原理
  • VC生命周期
  • 列表优化技巧
    • cell重用

事件分发机制及响应者链

事件分发机制

iOS 检测到手指触摸 (Touch) 操作时会将其打包成一个 UIEvent 对象,并放入当前活动Application的事件队列,UIApplication 会从事件队列中取出触摸事件并传递给单例的 UIWindow 来处理,UIWindow 对象首先会使用 hitTest:withEvent:方法寻找此次Touch操作初始点所在的视图(View),即需要将触摸事件传递给其处理的视图,这个过程称之为 hit-test view。
hitTest:withEvent:方法的处理流程如下:

  • 首先调用当前视图的 pointInside:withEvent: 方法判断触摸点是否在当前视图内;
  • 若返回 NO, 则 hitTest:withEvent: 返回 nil,若返回 YES, 则向当前视图的所有子视图 (subviews) 发送 hitTest:withEvent: 消息,所有子视图的遍历顺序是从最顶层视图一直到到最底层视图(后加入的先遍历),直到有子视图返回非空对象或者全部子视图遍历完毕;
  • 若第一次有子视图返回非空对象,则 hitTest:withEvent: 方法返回此对象,处理结束;
  • 如所有子视图都返回空,则 hitTest:withEvent: 方法返回自身 (self)。
    流程图如下:
    UI面试要点

响应者链原理

iOS的事件分发机制是为了找到第一响应者,事件的处理机制叫做响应者链原理。
所有事件响应的类都是 UIResponder 的子类,响应者链是一个由不同对象组成的层次结构,其中的每个对象将依次获得响应事件消息的机会。当发生事件时,事件首先被发送给第一响应者,第一响应者往往是事件发生的视图,也就是用户触摸屏幕的地方。事件将沿着响应者链一直向下传递,直到被接受并做出处理。一般来说,第一响应者是个视图对象或者其子类对象,当其被触摸后事件被交由它处理,如果它不处理,就传递给它的父视图(superview)对象(如果存在)处理,如果没有父视图,事件就会被传递给它的视图控制器对象 ViewController(如果存在),接下来会沿着顶层视图(top view)到窗口(UIWindow 对象)再到程序(UIApplication 对象)。如果整个过程都没有响应这个事件,该事件就被丢弃。一般情况下,在响应者链中只要有对象处理事件,事件就停止传递。
一个典型的事件响应路线如下:
First Responser –> 父视图–>VC->The Window –> The Application –> nil(丢弃)
我们可以通过 [responder nextResponder] 找到当前 responder 的下一个 responder,持续这个过程到最后会找到 UIApplication 对象。

VC生命周期

考察viewDidLoad、viewWillAppear、ViewDidAppear等方法的执行顺序。
假设现在有一个 AViewController(简称 Avc) 和 BViewController (简称 Bvc),通过 navigationController 的push 实现 Avc 到 Bvc 的跳转,调用顺序如下:
1、A viewDidLoad
2、A viewWillAppear
3、A viewDidAppear
4、B viewDidLoad
5、A viewWillDisappear
6、B viewWillAppear
7、A viewDidDisappear
8、B viewDidAppear
如果再从 Bvc 跳回 Avc,调用顺序如下:
1、B viewWillDisappear
2、A viewWillAppear
3、B viewDidDisappear
4、A viewDidAppear

列表优化技巧

cell重用

  • cell重用原理
    它的原理是,根据cell高度和tableView高度,确定界面上能显示几个cell。例如界面上只能显示5个cell,那么这5个cell都是单独创建的而不是根据重用标识符去缓存中找到的。当你开始滑动tableView时,第1个cell开始渐渐消失,第6个cell开始显示的时候,会创建第6个cell,而不是用第1个cell去显示在第6个cell位置,因为有可能第1个cell显示了一半,而第6个cell也显示了一半,这个时候第一个cell还没有被放入缓存中,缓存中没有可利用的cell。所以实际上创建了6个cell。当滑动tableView去显示第7个cell的时候,这时缓存中已经有第一个cell,那么系统会直接从缓存中拿出来而不是创建,这样就算有100个cell的数据需要显示,实际也只消耗6个cell的内存。
  • 根据cell的布局差异用不同的重用ID来进行cell的重用。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » UI面试要点求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们