【问题标题】:How to keep checking a value until it changes without using infinite loop?如何在不使用无限循环的情况下继续检查一个值直到它发生变化?
【发布时间】:2019-12-13 06:26:30
【问题描述】:

我的代码需要检查传感器值,直到它变为 1 或代码超时。因此我在想这样一个无限循环。

sensor 是一个可以实时访问传感器值的单例对象。默认值为 0,我想监视值是否更改为 1。

for (;;) {
  int sensorVal = [sensor getVal];
  if (sensorVal == 1) break;
  if (timeout) break;
}

但问题是我不想在我的代码中出现无限循环。我想知道在 Objective-C 中是否有更好的方法来编写它?

【问题讨论】:

  • 使用 KVO 或通知。
  • 或NSTimer 用于定期轮询。
  • [sensor val] 到底是什么?你怎么得到它?你需要一个委托方法吗?块完成?
  • @Lame 是一个单例对象,可以实时访问传感器值。

标签: objective-c infinite-loop observer-pattern key-value-observing


【解决方案1】:

您可以使用 KVO(关键值观察)来实现这一点。

观察你想要的变化:

[sensor addObserver:self forKeyPath:@"val" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];//observing the key in this class

然后使用这个委托方法:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if([keyPath isEqualToString:@"val"]) {
        /* Do the work here */
    }
}

【讨论】:

  • 值不是属性而是返回值的函数呢?我还能使用 KVO 吗?
猜你喜欢
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 2018-03-27
  • 1970-01-01
  • 2017-10-30
相关资源
最近更新 更多