我正在使用新的CoreMotion框架来监视某些硬件设备。这里是典型的代码来做到这一点:辅助队列中的Perfoming UI更新
-(void)startAccelerometer{
self.motion.accelerometerUpdateInterval = 1/30.0f;
NSOperationQueue* accelerometerQueue = [[NSOperationQueue alloc] init];
CMAccelerometerHandler accelerometerHandler = ^(CMAccelerometerData *accelerometerData, NSError *error) {
NSLog(@"Accelerometer realtime values");
NSLog(@"x=%f", accelerometerData.acceleration.x);
NSLog(@"y=%f", accelerometerData.acceleration.y);
NSLog(@"z=%f", accelerometerData.acceleration.z);
NSLog(@" ");
};
[self.motion startAccelerometerUpdatesToQueue:accelerometerQueue withHandler:[[accelerometerHandler copy]autorelease]];
}
这工作得很好。现在我想在UILabel上打印这些值,但是由于CoreMotion框架使用了块,所以不能保证在主队列中(事实上不适用于我的应用程序)。在这样的主队列上运行标签的设置是否“错误”?
-(void)startAccelerometer{
self.motion.accelerometerUpdateInterval = 1/30.0f;
NSOperationQueue* accelerometerQueue = [[NSOperationQueue alloc] init];
CMAccelerometerHandler accelerometerHandler = ^(CMAccelerometerData *accelerometerData, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
self.lblAccelerometer.text = [NSString stringWithFormat:@"Accelerometer:\nx = %f\ny = %f\nz = %f",
accelerometerData.acceleration.x,
accelerometerData.acceleration.y,
accelerometerData.acceleration.z];
});
};
[self.motion startAccelerometerUpdatesToQueue:accelerometerQueue withHandler:[[accelerometerHandler copy]autorelease]];
}
它工作得很好,我真的不认为有任何理由为什么这会让人不悦。对此有何想法?
我不能说一定的iOS,但在Swing(这也需要UI更新发生在特定线程上),您的示例的等价物正是您应该做的。 – millimoose 2012-07-31 01:20:08