主线程

时间:2018-06-15 09:09:04

标签: ios objective-c

我的iOS obj-c项目面临一个相当特殊的问题,我无法解决这个问题。我正在启动一个AVCaptureSession并设置一个观察者来观察isRunning属性。然后观察者调度到主线程并启用UIButton ...但是即使在会话开始运行时立即调用观察者,主线程上的任务有时会延迟9-10秒,有时会立即触发。 这是代码的一部分:

   -(void)addObservers {
    [self.session addObserver:self forKeyPath:@"running" options:NSKeyValueObservingOptionNew context:nil];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString: @"running"]) {
        NSLog(@"CaptureSession is running");

        dispatch_async(dispatch_get_main_queue(), ^{
            self.takePictureButton.enabled = self.session.isRunning;
            NSLog(@"Button is enabled: %i", self.session.isRunning);

        });
    } else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

这是输出:

2018-06-15 10:45:41.126595+0200 Scan[699:81561] CaptureSession is running
2018-06-15 10:45:50.141507+0200 Scan[699:81541] Button is enabled: 1

我感谢任何建议。我可以用不同的方法解决这个问题,但我想了解可能导致这种行为的原因。

0 个答案:

没有答案