事件传递
1.将事件对象由上往下传递(由父控件传递给子控件),找到最合适的控件来处理这个事件
2.调用控件的touches…方法
3如果调用了[super touches…] 就会将事件沿着响应者链条往上传递,传递给上一个响应者
4,接着调用上一个响应者的touches …方法
如何找到最合适的控件来处理事件
1.自己是否能接收触摸时间
2.触摸点是否在自己身上
3.从后往前遍历子控件 重复前面两个步骤
如果没有符合条件的子控件 那么自己最适合处理
响应者链条
事件传递是从上自下传递,响应是从下到上
分类的原理
分类是一个结构体,,里面存储着分类的对象方法,类方法,属性,协议信息
1通过runtime加载某个类的所有分类数据
2把所有的分类的方法,属性,协议数据,合并到一个大数组中(后编译的会在数组的前面)
3.将合并后的数据,插入到类原来的数据的前面
Load 方法的调用顺序
- Load 方法会在runtime加载类,分类时调用
- 每个类,分类的load 在程序运行过程中只调用一次
3.调用顺序
1)先调用类的load (按照编译顺序先后调用,先编译先调用)
调用子类的load方法前会先调用父类的load方法
2)再调用分类的load 按照编译顺序先后调用 先编译先调用
initialize的方法调用顺序
initialize 会在类第一次接收到消息时调用
先调用父类,再调用子类(先初始化父类 再初始化子类,每个类只会初始化1次)
initialize 是通过objc_msgSend进行调用的 所有如果子类没有实现 +initialize,会调用父类的initialize方法
如果分类实现了initialize 就会覆盖类本身的initialize调用
分类和类扩展的区别
分类是运行时才将数据合并到类信息中,类扩展是编译时,它的数据就包括在了类信息中
分类有名字,类扩展没有分类名字 是一种特殊的分类
分类智能扩展方法,类扩展可以扩展属性,成员变量和方法
网友评论