我正在使用iOS动画管理器,它使用块处理程序。我有一个“加速”对象......
@property (atomic, readonly) CMAccelerometerData * rawAccelerometerData;
在.m文件中,我有......
-(void) startServices{
[_motionManager startAccelerometerUpdatesToQueue:_queue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
_rawAccelerometerData = accelerometerData;
dispatch_async(dispatch_get_main_queue(),^(void){
[delegate accelerometerUpdate:accelerometer];
});
}];
}
Delegate是一个视图控制器:
-(void) accelerometerUpdate:(Accelerometer *) accelerometer {
_accelX.text = [NSString stringWithFormat:@"%f", accelerometer.rawAccelerometerData.acceleration.x];
_accelY.text = [NSString stringWithFormat:@"%f", accelerometer.rawAccelerometerData.acceleration.y];
_accelZ.text = [NSString stringWithFormat:@"%f", accelerometer.rawAccelerometerData.acceleration.z];
}
但是,当我访问_rawAccelerometerData
时,我会收到Bad Access Exception
。
我的猜测是accelerometerData
对象被破坏了。我该怎么做?
答案 0 :(得分:0)
这是一个多线程问题。 (感谢holex将我指向那个方向。)
始终更新_rawAccelerometerData,并且新对象正在替换旧对象(由于ARC而被破坏)。
在另一个线程上,我正在访问_rawAccelerometerData。偶尔,当我访问_rawAccelerometerData时,我正在访问该对象的较旧“副本”。由于该对象已经被破坏,我得到了一个不良访问。