美文网首页
3-KVO本质

3-KVO本质

作者: 今晚打老虎_9527 | 来源:发表于2018-07-30 18:34 被阅读0次

1. 应用

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.tom = [[Person alloc] init];
    self.tom.age = 1;

    self.jack = [[Person alloc] init];
    self.jack.age = 2;
    //添加监听
    [self.tom addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
    //查找setAge方法地址
    NSLog(@"tom - %p", [self.tom methodForSelector:@selector(setAge:)]);
    NSLog(@"jack - %p", [self.jack methodForSelector:@selector(setAge:)]);
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
    NSLog(@"%@-%@-%@",object,keyPath,change);
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    self.tom.age ++;
    //手动触发监听方法
    [self.tom willChangeValueForKey:@"age"];
    [self.tom didChangeValueForKey:@"age"];
}


- (void)dealloc {
    //移除监听
    [self.tom removeObserver:self forKeyPath:@"age"];
}

2. 本质

当未给对象添加监听时,对象的isa指针指向它的类对象


image.png

当给对象添加监听时,对象的isa指针指向类对象NSKVONotifying_Person,NSKVONotifying_Person类为Person类的子类,此类为runtime动态生成


image.png

NSKVONotifying_Person类中的setAge方法和Person中的setAge方法


image.png

3. 获取类对象的方法

- (void)printMethodForClass:(Class)cls{
    unsigned int count;
    
    Method* methodList =  class_copyMethodList(cls, &count);
    
    for (int i = 0; i < count; i++) {
        Method itemMothod = methodList[I];
        
        NSString* methodName = NSStringFromSelector(method_getName(itemMothod));
        NSLog(@"%@",methodName);
    }
    //释放
    free(methodList);
}
[self printMethodForClass:object_getClass(self.tom)];
image.png

相关文章

  • 3-KVO本质

    1. 应用 2. 本质 当未给对象添加监听时,对象的isa指针指向它的类对象 当给对象添加监听时,对象的isa指针...

  • 本质的本质

    这个世界为什么会有友谊这种东西?进化心理学认为这是因为在采集-狩猎时期,个人的食物供应充斥着不确定性,如果一个人长...

  • 本质

    白色是本质, 五谷杂粮是本质, 清净的是本质, 肮脏的是本质, 痛苦是本质, 恶也是本质, 棉麻的是本质, 不舒服...

  • 本质

    宗教的本质是回归,科学的本质是革新,艺术的本质是释放,经济的本质是交换,教育的本质是规范,哲学的本质是本质。 郑冠军/文

  • 学者的研究成果

    有表象就有本质,也就是有表象的本质,而本质又是什么?若本质也是表象,岂不是本质的本质仍有本质?在科学的大道上,人因...

  • 关于营销、运营、文案、新媒体的28条思考(2)

    13、营销的本质是创造客户价值,营销的本质是连接,营销的本质是管理,营销的本质是人,营销的本质是互动,营销的本质是...

  • 梵咒(真言)

    所有存在的本质是土,土的本质是水,水的本质是植物,植物的本质是人,人的本质是言语,言语的本质是神圣知识(吠陀),吠...

  • 本质。

    其实自己本质上就是一个冷冷的人,表面再怎么热情心里还是分得很清。 喜欢的东西怎么样不管廉价与否都会喜欢,不会说只喜...

  • 本质

    曾经认为自己不成功是缺少一个舞台,可经历过无数次的失败后才发现,我缺少的是优秀的品质

  • 本质

    今天休息,起床后开始做基础动作柔软身体,想起很久没有跑步,换上运动装手机也没带下楼去人民公园。 9点的公园,已经非...

网友评论

      本文标题:3-KVO本质

      本文链接:https://www.haomeiwen.com/subject/igopmftx.html