![]() |
1
1
你的取消订阅代码比订阅代码更容易受到攻击。不幸的是,KVO不能很好地处理这一问题,失败会引发异常,而不是像您所期望的那样什么都不做。您要么需要确保它只命中一次,要么至少捕获如下异常:
|
![]() |
2
0
尽管我非常喜欢KVO,但这需要平衡观察和移除,这是一个真正的问题。如果你没有一个KVO观察到的对象,而没有告诉发送类去注册你,然后类尝试向接收方对象发送更新,你也会崩溃。哎呀!访问错误! 由于没有正式的ping方法来查看您是否添加了一个观察者(考虑到操作系统中很大一部分是基于KVO的,这很荒谬),所以我只使用一个简单的标志系统来确保没有任何东西被添加超过一次。在下面的示例中,我有一个bool标志来跟踪观察者的状态。
是的,使用旗帜检查状态是编码警察不赞成的。但除了数豆子,真的没有其他方法可以确定。 无论您做什么,请记住,即使在调用viewWillDisappear之后,某些类也需要进行观察(但视图仍然存在于层次结构中的某个位置),因此您不能只执行观察/从viewWillAppear/WillDisappear中移除技巧。您可能需要使用对创建视图的对象的委托回调(并将其销毁),以确保不会让KVO调用类挂起。话虽如此,但我不是这方面的专家,所以我相信有人比我的专利数豆lol更能做到这一点 |
![]() |
Martin sku · 在目标C中打印时间 2 年前 |
![]() |
Vinod prajapat · 如何更新数组的最后一个元素? 2 年前 |
![]() |
subin272 · 修复iOS中的多个按钮单击事件? 6 年前 |
![]() |
James Chan · 如何使用锁定/解锁? 6 年前 |
![]() |
Josh F. · NSBundle mainBundle返回零 6 年前 |