1.事件传递与视图响应链
事件传递 (确认响应视图)
- 方法
1 | - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event |
- 流程
1 | 注意:对子视图遍历为倒序遍历,最后添加到UIWindow上的视图,最先遍历 |
- 案例 (设计矩形按钮仅响应中心圆部分)
1 | // |
响应链
- 方法
1 | // 3个核心方法 |
1 | // 特殊情况处理 (如:取消屏幕边界的响应) |
流程 (官方示例)
案例
1 | 若子视图一直询问父视图直到UIApplicationDelegate都仍未有得到响应去处理事件,会有什么影响? |
2. KVO实现原理
简介
1.KVO是Key-value observing的缩写
2.KVO是Objective-C对观察者设计模式的实现
3.KVO是使用了isa混写(isa-swizzling)技术来实现的
流程分析
概述
为要监听的属性持有类class A
注册一个观察者,系统会在运行时动态创建一个class NSKVONotifying_A
类;
然后把原类class A
的 isa 指针指向新创建的类class NSKVONotifying_A
(isa指针指向修改即为isa混写技术);
实际class NSKVONotifying_A
继承class A
,这种继承关系主要是为了重写原类的Setter方法,来达到通知所有观察对象的目的.
由此有使用Setter方法改变值KVO才会生效
方法
- KVO调用方法
1 | // 注册方法 使用kvo监听obj的value属性变化 |
- 重写的Setter添加的两个核心方法
1 | // 手动kvo |
- NSKVONotifying_A 的Setter方法
1 | - (void)setValue:(id)value { |
- 案例
1 | 1.通过kvc设置value时, kvo的监听能否生效? |
- 本文作者: 醉疏狂
- 本文链接: https://hubin97.github.io/2020/01/12/知识点总结1/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!