KVO岩石.现在我如何异步使用它?

dug*_*gla 4 iphone cocoa-touch key-value-observing key-value-coding

我在KVO上卖,但如果以明显的方式使用它是同步的.我想在我快速连续发射许多KVO消息的情况下使用它,这导致我的应用程序在处理KVO消息时停止运行.有人可以建议一种方法 - 也许使用NSOperationNSThread- 这将在这里工作?

我的目标是尽可能保持KVO的分离,灵活性.

bbu*_*bum 13

KVO本质上是单线程的,因为KVO通知将在与更改相同的线程上传递.

当然,UIKit和Cocoa都只是希望你在主线程上做一些UI元素.

因此,如果您正在进行异步操作,那么您最有可能使用线程,如果是这样,已经存在同步问题,因为您需要从某个线程获取通知到主线程.

其中有关键.您可以在将更改通知传递到主线程之前合并更改通知,而不是盲目地转发每个更改通知.

您可以通过多种方式执行此操作.具体的解决方案对您的应用来说非常独特.

就个人而言,我尽量避免细粒度操作的合并和转发.我发现告诉主线程特定的对象子图已经改变更加简单.更可能的是,随后将对用户可见的更改的绘图代码需要重绘相关状态,因此,相关更改将自动反映出来.

正如您所推测的那样,关键是要限制通知,以免您降低应用响应速度(或破坏设备电池寿命).