我正在用户界面上显示来自数据模型的信息。我目前这样做的方法是通过如下授权:
@protocol DataModelDelegate <NSObject>
- (void)updateUIFromDataModel;
@end
我在我的控制器类中实现委托方法如下,使用 GCD 将 UI 更新推送到主线程:
- (void)updateUIFromDataModel {
dispatch_async(dispatch_get_main_queue(), ^{
// Code to update various UI controllers
// ...
// ...
});
}
我担心的是,在某些情况下,此方法可能会被非常频繁地调用(每秒约 1000 次,每次更新多个 UI 对象),这对我来说就像是用命令向主线程“发送垃圾邮件”。
发送到主线程是否太多了?如果是这样,是否有人对解决此问题的最佳方法有任何想法?
我已经研究过了dispatch_apply
,但是在合并数据时这似乎更有用,这不是我所追求的 - 如果更新太频繁,我真的只想跳过更新,所以只有合理数量的更新被发送到主线程!
我正在考虑采用不同的方法并实现一个计时器来不断地轮询数据,比如每 10 毫秒一次,但是由于数据更新往往是零星的,我觉得这样做会很浪费。
结合这两种方法,我考虑的另一个选择是等待更新消息并通过设置计时器以按设定的时间间隔轮询数据来响应,然后如果数据似乎已停止更改,则禁用计时器。但这是否会使问题过于复杂,并且明智的方法是简单地运行一个恒定的计时器吗?
编辑: 在下面添加了一个答案,显示了使用调度源的改编