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

Iphone KVO岩石。现在我如何异步使用它?,iphone,cocoa-touch,key-value-observing,key-value-coding,Iphone,Cocoa Touch,Key Value Observing,Key Value Coding,我在KVO上销售,但如果以明显的方式使用,它是同步的。我想在这样一种情况下使用它:我快速连续地发送许多KVO消息,并且在处理KVO消息时导致我的应用程序停止。有人能推荐一种方法吗?也许可以使用NSOperation或NSThread,在这里可以使用 我的目标是尽可能保持KVO的解耦和灵活性。KVO本质上是单线程的,因为KVO通知将在更改时的同一线程上交付 当然,UIKit和Cocoa都只希望您在主线程上欺骗UI元素 因此,如果您正在执行异步操作,则最有可能使用线程,如果是这样,则已经存在同步问题

我在KVO上销售,但如果以明显的方式使用,它是同步的。我想在这样一种情况下使用它:我快速连续地发送许多KVO消息,并且在处理KVO消息时导致我的应用程序停止。有人能推荐一种方法吗?也许可以使用
NSOperation
NSThread
,在这里可以使用


我的目标是尽可能保持KVO的解耦和灵活性。

KVO本质上是单线程的,因为KVO通知将在更改时的同一线程上交付

当然,UIKit和Cocoa都只希望您在主线程上欺骗UI元素

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

关键就在这里。您可以在将更改通知传递到主线程之前合并这些更改通知,而不是盲目地在收到更改通知时转发它们

您可以通过多种方式来实现这一点。最有可能的是,特定的解决方案对于您的应用程序来说是非常独特的

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


正如您所猜测的,关键在于限制通知,这样您就不会影响应用程序的响应(或破坏设备的电池寿命)。

查看NSNotification。这不完全是一回事,但是你可以在后台线程上发出通知(只需做一点研究和工作)。你可以保持良好的脱钩和开火忘记行为。

使用苹果推荐的接待员模式,谢谢。再详细说明一下。我正在做一个图形应用程序。伴随着大量的敲击声、声音f/x和视觉效果的不断出现。我的计划是严重依赖KVO,根据特定的行为触发声音f/x。触发器的声音可以快速而猛烈,每一个都可以播放一秒钟以上。您是否建议放弃KVO,只为并发非阻塞声音f/x创建一个NSOperation实例?干杯,道格拉斯,谢谢亚当。是的,NSNotification看起来比KVO更适合我的需要。干杯。现在很容易与GCD(大中央调度)异步使用KVO。NSNotification提供的灵活性远远低于KVO,在许多情况下可能不是一个有效的替代品。