我有一段代码调用 [NSOperationQueue waitUntilAllOperationsAreFinished],在队列中,我为加速度计放置了一个传感器检测器。
加速度计委托需要主线程才能响应 didAccelerate 以记录收集的数据。但是,由于 Queue 阻塞了 main 方法,Acclerometer 的委托似乎永远不会触发。我还注意到,在 NSOperationQueue 块发生后,任何被迫在主线程 (NSOBject performSelectorOnMainThread:withObject:waitUntilDone) 上运行的东西也永远不会运行。
我是否有另一个选项可以允许阻塞发生,但仍然允许加速计委托触发。
这是一个快速的代码片段:
NSOperation* accelOp = [[AccelerometerOperation alloc] init];
NSOperationQueue* queue = [[NSOperationQueue alloc] init];
[queue addOperation:accelOP];
[queue waitUntilAllOperationsAreFinished];
对于 AccelerometerOperation,我通过修改 isFinished 和 isExecuting 绕过了 start 方法完成时它没有结束的问题:
-(void) start{
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
}
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{
NSLog(@"Did accelerate");
}
如果我删除 waitUntilALlOperationsAreFinished,日志会打印“Did 加速”。但是,在 waitUntilFinished 运行的情况下,即使在 DidAccelerate 中设置断点也不会触发。