如何在不使用无限循环的情况下一直检查值直到它发生变化?
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 */
}
}
我的代码需要检查传感器值,直到它变为 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 */
}
}