KVO 很震撼。现在我如何异步使用它?

2024-03-11

我对 KVO 很感兴趣,但如果以明显的方式使用它是同步的。我想在以下情况下使用它:我快速连续地发出许多 KVO 消息,并且它导致我的应用程序在处理 KVO 消息时逐渐停止。有人可以建议一种方法 - 也许使用NSOperation or NSThread- 这在这里有用吗?

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


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

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

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

关键就在于此。您可以在将更改通知传递到主线程之前合并这些更改通知,而不是盲目地转发每个更改通知。

您可以通过多种方式来执行此操作。特定的解决方案很可能对于您的应用程序来说是非常独特的。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KVO 很震撼。现在我如何异步使用它? 的相关文章

随机推荐