1、iOS用什么方式实现一个对象的KVO?(KVO的本质是什么)
比如给Person对象的age属性添加KVO监听
1、利用Runtime生成Person子类<NSKVONotifying_Person
>,并且让对象的isa指针指向NSKVONotifying_Person
2、当修改Person
的age
属性时候,会调用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"];
网友评论