zoukankan      html  css  js  c++  java
  • KVO的内部实现原理

    KVO的内部实现原理

    1》KVO是基于runtime机制的。

    2》当某个类的对象第一次被开始监听时,系统就会在运行期间动态为其创建以NSNotifying_类名 为名的子类,在这个子类中重写父类中任何被观察属性的setter方法,子类在被重写的setter方法中实现真正的通知机制。

     1 // 刚创建person时,person的isa指针执行person
     2     HMPerson *person = [[HMPerson alloc] init];
     3     
     4     person.name = @"HM";
     5     person.age = 10;
     6     
     7     // 为person添加监听器
     8     // 下面方法过后,person的isa指针指向了NSKVONotifying_HMPerson对象(默认生成person的子类)
     9     [person addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
    10     
    11     self.person = person;
    12     
    13     // 子类NSKVONotifying_HMPerson会重写(void)setAge:(int)age方法,在方法中调用监听方法
    14 //    - (void)setAge:(int)age
    15 //    {
    16 //        [super setAge:age];
    17 //        
    18 //        //    [self observeValueForKeyPath:@"age" ofObject:<#(id)#> change:<#(NSDictionary *)#> context:<#(void *)#>]
    19 //    }

    NSKVONotifying_HMPerson

    1 // 被监听对象的监听属性改变时,就会调用这个方法
    2 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    3 {
    4     NSLog(@"%@", change);
    5 }
  • 相关阅读:
    电子商务:不只是一个网站那么简单
    sqlserver中使用查询分析器的一点小技巧
    以成败论英雄
    SEO 工具集合
    网页中常用JAVASCRIPT技巧
    调用样式表(基础)
    【转载】fontsize:100%有什么作用
    Div+CSS常见错误
    css简单的总结
    【转载】网页尺寸规范
  • 原文地址:https://www.cnblogs.com/fkunlam/p/4366302.html
Copyright © 2011-2022 走看看