响应者链 形象的理解

来源:互联网 发布:网络组织结构 编辑:程序博客网 时间:2024/05/16 04:13

  • 1.Runloop会检测到屏幕的点击事件,然后分发事件(RunLoop相当于项目主管,把这个事情交给最合适的对象去处理,)

  • 2.通过hitTest(返回最适合处理该事件的view) 及 pointInside(判断传过来的点是否在检测的view上) 找到最合适的view

  • 3.事件的传递过程:Runloop-->UIApplication-->UIWindow-->RootViewController-->View-->递归的遍历View的子View(倒序)

  • 4.找到最合适的处理该事件的view后,就会再去查找处理该事件的方法.按以上的顺序从后往前查找.

  • 响应者链的特点:

    • 响应者链通常是由视图构成的

    • 一个视图的下一个响应者是他的视图控制器(如果有的话),然后再转给他的父视图

    • 视图控制器的下一个响应者为其管理的视图的父视图

      • 单例的窗口(UIWindow)的内容视图将指向窗口本身作为他的下一个响应者

      • 单例的应用(UIApplication)是一个响应者链的终点,他的下一个响应者指向nil,以结束整个循环

  • 如何 形象的去说明?

    • 最开始就是RunLoop检测到屏幕点击,我们把Runloop可以看成是一个项目经理,检测到屏幕点击事件就相当于它接到了一个新项目,那接下来就需要寻找这个项目的负责人,怎么寻找呢,也就是要把该点击事件按能力大小顺序传递下去,一个个的考察,是否有能力做这个项目,如果中间考察到这个人已经能力不足以完成这个项目了,那同样排在它后面的人也就不需要再考察了,此时它的上一个人就是最适合的view.但是找到最适合的view之后还需要找到能响应该事件的方法,杀鸡焉用宰牛刀,那从最经济的角度考虑,当然是从以上的寻找顺序反过来找,一直找到UIApplication,如果还没找到,该事件就会被丢弃.也就是该项目就不能立项了.如果中间找到了一个能响应这个事件的方法,那项目就交给他去做就好了.


0 0