KVO的实现原理
来源:互联网 发布:淘宝毛绒玩具店铺介绍 编辑:程序博客网 时间:2024/05/21 17:38
KVO的实现原理
kvo的使用
// 头文件#import "HMPerson.h"- (void)viewDidLoad{ [super viewDidLoad]; // 运行时机制:runtime HMPerson *p = [[HMPerson alloc] init]; p.age = 20; // 用KVO监听p对象age属性的改变 [p addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil]; p.age = 30; self.p = p;}// 在对象被释放的时候一定要移除监听- (void)dealloc{ [self.p removeObserver:self forKeyPath:@"age"];}/** * 当监控的某个属性的值改变了就会调用 * * @param keyPath 属性名(哪个属性改了?) * @param object 哪个对象的属性被改了? * @param change 属性的修改情况(属性原来的值、属性最新的值) * @param context void * == id */- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ NSLog(@"%@对象的%@属性改变了:%@", object, keyPath, change);}
KVO实现原理
利用运行时机制(runtime)系统内部会动态生成一个继承自HMPerson的子类NSKVONotifying_HMPerson。
重写HMPerson类的setAge方法:
#import "NSKVONotifying_HMPerson.h"@implementation NSKVONotifying_HMPerson- (void)setAge:(int)age{ [super setAge:age]; // 通知监听器 [监听器 observeValueForKeyPath:@"age" ofObject:self change:@{} context:nil];}@end
每个对象内部都会有个isa指针,isa指针指向哪里,就说明对象是哪个类,就会调用哪个类的方法。
在运行时,系统会动态吧p对象的isa指针指向 NSKVONotifying_HMPerson类
[p addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];
所以之后再调这句代码的时候
p.age = 30;
p对象的真实类型是NSKVONotifying_HMPerson,所以会调用NSKVONotifying_HMPerson的setAge方法,重写了setAge:方法,内部又会调用super 的aetAge:方法;所以父类的setAge:也会调用。
0 0
- KVO的实现原理
- KVO的实现原理
- KVO的实现原理
- KVO 的实现原理
- KVO的底层实现原理
- KVO内部的实现原理
- KVO的底层实现原理
- KVO的底层实现原理
- KVO的内部实现原理
- KVO的实现原理分析
- iOS KVO的实现原理
- KVO的底层实现原理
- (三)如何自己动手实现 KVO,KVO的实现原理
- iOS的KVO底层实现原理
- KVO的原理和简单实现
- iOS中KVO的底层实现原理
- KVC/KVO的实现原理简述
- iOS ---- KVO的内部实现原理
- C++中关于sizeof的那些事
- How to config Bananapi pro AV output as default video signal ?
- java学习IO流之对象序列化
- 类集框架
- intellij idea 修改背景保护色&&修改字体&&快捷键大全
- KVO的实现原理
- Crazyflie笔记六: PC端 python 开发环境,安卓端开发环境搭建
- Java字符串格式化为时间,时间格式化为字符串
- Crazyflie笔记七: PC端 Python API 说明
- Genymotion 出现“Unable to load VirtualBox engine”
- html 浮动窗口
- UIButton 按钮 (孙子类)
- TCP的长连接与短连接
- 2.X集群启动详解