如何在不使用无限循环的情况下一直检查值直到它发生变化?

How to keep checking a value until it changes without using infinite loop?

我的代码需要检查传感器值,直到它变为 1 或代码超时。于是想到了这样一个死循环

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

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

但问题是我不想在我的代码中出现无限循环。我想知道在 Objective-C?

中是否有更好的写法

您可以使用 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 */
    }
}