移除观察者的方法里,还应该有[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

考虑很周全👍🏻👍🏻👍🏻

0
0

面试跳槽提升必备 全面解析iOS中的Runtime机制

高薪职位,复杂业务需求,高性能APP,Runtime技术不可不学。

275 学习 · 48 问题

查看课程