我在KVO上卖,但如果以明显的方式使用它是同步的。我想在我快速连续发射许多KVO消息的情况下使用它,这导致我的应用程序在处理KVO消息时停止运行。有人可以提出一种方法 - 可能使用NSOperation
或NSThread
- 这可以在这里使用吗?
我的目标是尽可能保留KVO的分离灵活性。
答案 0 :(得分:13)
KVO本质上是单线程的,因为KVO通知将在与更改相同的线程上传递。
当然,UIKit和Cocoa都只是希望你在主线程上做一些UI元素。
因此,如果您正在进行异步操作,那么您最有可能使用线程,如果是这样,则已经存在同步问题,因为您需要将某些线程的通知发送到主线程。
其中有关键。您可以在将更改通知传递到主线程之前合并更改通知,而不是盲目地转发每个更改通知。
您可以通过多种方式执行此操作。具体的解决方案对您的应用来说非常独特。
就个人而言,我试图避免细粒度操作的合并和转发。我发现告诉主线程特定的对象子图已经改变更加简单。更可能的是,随后将对用户显示更改的绘图代码需要重绘相关状态,因此相关更改将自动反映。
正如您所推测的那样,关键是限制通知,以免您降低应用响应速度(或破坏设备电池寿命)。
答案 1 :(得分:3)
答案 2 :(得分:0)
查看NSNotification。这不是一回事,但您可以在后台线程上发布通知(通过一些研究和工作)。你可以保持良好的脱钩和发射后的行为。