标签:oid instance 代码 返回 动态 void 而在 观察 ring
KVO的全称是Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性值的改变
利用RuntimeAPI动态生成一个子类,并且让instance对象的isa指向这个全新的子类
当修改instance对象的属性时,会调用Foundation的_NSSetXXXValueAndNotify函数
_NSSetXXXValueAndNotify的内部调用如下调用willChangeValueForKey:
调用原来的setter实现
调用didChangeValueForKey;didChangeValueForKey:内部会调用observer的observeValueForKeyPath:ofObject:change:context:方法
iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?)
答:如上
+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key {
if ([key isEqualToString:@"object"]) {
return NO;
}
return [super automaticallyNotifiesObserversForKey:key];
}
- (void)setObject:(NSObject *)object {
if (object != _object) {
[self willChangeValueForKey:@"object"];
_object = object;
[self didChangeValueForKey:@"object"];
}
}
标签:oid instance 代码 返回 动态 void 而在 观察 ring
原文地址:https://www.cnblogs.com/Lanht/p/11453157.html