我将如何构建一个持续小延迟的循环,此循环将检查对象属性是否为非null,循环将在x秒后超时。
我正在等待另一个对象来设置HTTP响应属性,这是不好的做法还是?
答案 0 :(得分:4)
为什么需要继续轮询对象?你有没有想过KVO(Key Value Observing?):
[self.yourObject addObserver: self forKeyPath: @"objectProperty" options: NSKeyValueObservingOptionNew context: nil];
然后:
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if (object == yourObject) {
//Check property is not nil
}
}
和
- (void) dealloc
{
[yourObject removeObserver: self forKeyPath: @"objectProperty"];
}
有关详细信息,请参阅Apple docs
答案 1 :(得分:2)
如果要检查属性中的更改,可以使用键值观察(KVO),这就是它的用途。
基本上:
[theObjectHavingTheProperty addObserver:self forKeyPath:@"propertyName" options:0 context:nil];
不要忘记删除dealloc上的观察者。
每当属性发生变化时,都会调用此方法:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context