• 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 }
  • 相关阅读:
    Bootstrap基础(七):按钮
    Bootstrap基础(六):表单
    Bootstrap基础(五):表格
    Bootstrap基础(四):代码
    Bootstrap基础(三):排版
    Bootstrap基础(二):网格系统
    Bootstrap基础(一):CSS 概览
    本人承接各种.Net网站制作,软件项目等业务。完美帮您定做
    iOS沙盒路径的查看和使用
    asp.net 源码坊4-6源码发布
  • 原文地址:https://www.cnblogs.com/fkunlam/p/4366302.html
Copyright © 2020-2023  润新知