NSOperationQueue阻塞主线程,UIAccelerometerDelegate不会触发

时间:2011-10-07 11:28:18

标签: iphone objective-c ipad nsoperationqueue uiaccelerometer

我有一段调用[NSOperationQueue waitUntilAllOperationsAreFinished]的代码,在这个队列中,我为Accelerometer放置了一个传感器检测器。

加速度计委托需要主线程才能响应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 accelerated”。但是,在waitUntilFinished运行时,即使在DidAccelerate中设置一个断点也不会触发。

0 个答案:

没有答案