移除观察者的方法里,还应该有[info.observer isEqualTo:observer]的判断吧
来源:8-8 模拟KVO的实现-实际运用
慕粉1329115862
2022-01-10
for (CFObserverInfo *info in observers) {
if ([info.key isEqualToString:key]) {
[observers removeObject:info];
break;
}
}
原工程里的代码只判断了info.key是否等于key,但是这样就把监听某个key的所有object都移除了,应该还要判断一下info.observer是否为入参中的observer吧,变成这样:
for (CFObserverInfo *info in observers) {
if ([info.key isEqualToString:key] && [info.observer isEqualTo:observer]) {
[observers removeObject:info];
break;
}
}
写回答
1回答
-
逆风
2022-01-12
考虑很周全👍🏻👍🏻👍🏻
00
相似问题