ios拓展19-KVO浅解

笔者在网上看到关于KVO的原理,往往都有运行时,并且写的比较详细. 但是要想看懂,首先要熟悉运行时的方法(至少用到的几个方法要知道), 对于新手门槛高,今天给大家来个简单浅显的讲解, 不涉及运行时方法.

ps:如果想知道KVO是如何通过运行时实现的,网上这方面资料很多,后期笔者也会增加

1. 下面是一个简单的kvo运用

@interface ViewController ()
@property (strong, nonatomic) Person    *person;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.person = [Person new];
    self.person.age = 18;//====person 只有一个age成员变量
    
    // kvo监听前  isa指针
    NSLog(@"isa:%@",[self.person valueForKeyPath:@"isa"]);
    
    // 添加监听者
    [self.person addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew context:nil];
    
    // kvo监听后   isa指针
    NSLog(@"isa:%@",[self.person valueForKeyPath:@"isa"]);
    self.person.age = 20;
    
}
- (void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id)object change:(nullable NSDictionary<NSString*, id> *)change context:(nullable void *)context {
    NSLog(@"%@",change);
}
isa指针改变
2. 如果我们自定义个 NSKVONotifying_Person 类,
此时,程序运行会出错,  kvo其实就是通过运行时动态创建一个继承Person的子类, 并重写了被观察属性keyPath的setter 方法
当使用kvo监听,其实是监听NSKVONotifying_Person的,    
增加后,程序会报错
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则其观察...
    DeerRun阅读 10,138评论 11 33
  • KVC 什么是 KVC KVC 是 Key-Value-Coding 的简称。 KVC 是一种可以直接通过字符串的...
    LeeJay阅读 2,221评论 6 41
  • 前言: 本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的理解。 由于KVO内容较少,而且是以KV...
    土b兰博王阅读 3,100评论 0 33
  • KVO即key-value-observing,键值观察,是一种观察者模式的实现机制(另一种为Notificati...
    xinghunMeng阅读 226评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,826评论 25 709