有人用过 facebook 的 KVOController 吗?有试过监听自己 keypath 的吗?

有人用过 facebook 的 KVOController 吗?有试过监听自己 keypath 的吗?

[self.KVOControllerNonRetaining observe:self keyPath:@"age" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld block:^(id _Nullable observer, id _Nonnull object, NSDictionary<NSString *,id> * _Nonnull change) {

NSString *new = change[NSKeyValueChangeNewKey];

NSString *old = change[NSKeyValueChangeOldKey];

NSLog(@"new: %@ - old: %@",new,old);

}];

这里的 self 是一个 UIViewController,他有个 age 属性,如果想自己监听自己,我这边用了 self.KVOControllerNonRetaining 防止 retain cycle, 但是一旦我 pop 掉这个 vc 就会 crash, 必须要在 dealloc 之前调用 unobserve 才行,原因大概是他内部用的是 NSMaptable, 我看他 issue 里面的 64 93 94 讨论的蛮凶的,有个人提出在 retainObserved 为 NO 的情况下,修改 NSPointerFunctionsOptions 的 NSPointerFunctionsWeakMemory 为 NSPointerFunctionsOpaqueMemory,我试了下,这样的确不用手动再调 unobserve 了, 但是原作者又说改为 NSPointerFunctionsOpaqueMemory 不是释放指针会有问题,所以想问问大家伙儿有什么看法?或者大家监听自己 keyPath 姿势都是怎样的?

毕竟 手动调 unobserve 还是听不优雅的,我觉得。。。

阅读 2.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进