美文网首页
底层原理总结 — KVO

底层原理总结 — KVO

作者: 踩坑小分队 | 来源:发表于2020-02-08 21:31 被阅读0次
1、iOS用什么方式实现一个对象的KVO?(KVO的本质是什么)

比如给Person对象的age属性添加KVO监听

1、利用Runtime生成Person子类<NSKVONotifying_Person>,并且让对象的isa指针指向NSKVONotifying_Person
2、当修改Personage属性时候,会调用Foundation_NSSet***ValueAndNotify函数
2.1、调用willChangeValueForKey
2.2、调用super的属性setAge:方法
2.3、调用didChangeValueForKey
2.3.1、内部调用- (void)observeValueForKeyPath: ofObject:change: context:;

2、怎么手动触发KVO监听?

调用对象的

[self.per1 willChangeValueForKey:@"age"];
[self.per1 didChangeValueForKey:@"age"];
image.png

3、直接修改成员变量会触发KVO吗?

@interface Person : NSObject
{
    @public
    NSString *_name;
}

/// 名字
@property (nonatomic, copy) NSString * name;
@end
self.per->_name = @"333";

不能,必须要触发set方法,或者【手动触发】KVO才可以,详情见上面。

怎么才能实现,直接修改成员变量,触发KVO呢?

[self.per willChangeValueForKey:@"name"];
self.per->_name = @"333";
[self.per didChangeValueForKey:@"name"];

相关文章

网友评论

      本文标题:底层原理总结 — KVO

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