美文网首页
事件传递

事件传递

作者: 不如养花 | 来源:发表于2020-04-16 09:41 被阅读0次

事件传递

1.将事件对象由上往下传递(由父控件传递给子控件),找到最合适的控件来处理这个事件
2.调用控件的touches…方法
3如果调用了[super touches…] 就会将事件沿着响应者链条往上传递,传递给上一个响应者
4,接着调用上一个响应者的touches …方法

如何找到最合适的控件来处理事件

1.自己是否能接收触摸时间
2.触摸点是否在自己身上
3.从后往前遍历子控件 重复前面两个步骤
如果没有符合条件的子控件 那么自己最适合处理

响应者链条

事件传递是从上自下传递,响应是从下到上

分类的原理

分类是一个结构体,,里面存储着分类的对象方法,类方法,属性,协议信息
1通过runtime加载某个类的所有分类数据
2把所有的分类的方法,属性,协议数据,合并到一个大数组中(后编译的会在数组的前面)
3.将合并后的数据,插入到类原来的数据的前面

Load 方法的调用顺序

  1. Load 方法会在runtime加载类,分类时调用
  2. 每个类,分类的load 在程序运行过程中只调用一次

3.调用顺序
1)先调用类的load (按照编译顺序先后调用,先编译先调用)
调用子类的load方法前会先调用父类的load方法
2)再调用分类的load 按照编译顺序先后调用 先编译先调用

initialize的方法调用顺序
initialize 会在类第一次接收到消息时调用
先调用父类,再调用子类(先初始化父类 再初始化子类,每个类只会初始化1次)

initialize 是通过objc_msgSend进行调用的 所有如果子类没有实现 +initialize,会调用父类的initialize方法
如果分类实现了initialize 就会覆盖类本身的initialize调用

分类和类扩展的区别

分类是运行时才将数据合并到类信息中,类扩展是编译时,它的数据就包括在了类信息中
分类有名字,类扩展没有分类名字 是一种特殊的分类
分类智能扩展方法,类扩展可以扩展属性,成员变量和方法

相关文章

网友评论

      本文标题:事件传递

      本文链接:https://www.haomeiwen.com/subject/ifmlvhtx.html