У меня есть класс с иваром:
@interface myCoolClass:NSObject
{
CMAttitude *referenceAttitude;
}
В моей реализации есть следующие селекторы:
- (void) startTrackingMotion
{
if (motionManager == nil) {
motionManager = [[CMMotionManager alloc] init];
motionManager.accelerometerUpdateInterval = 0.01;
motionManager.deviceMotionUpdateInterval = 0.01;
referenceAttitude = [motionManager.deviceMotion.attitude retain];
}
[motionManager startDeviceMotionUpdates];
if (referenceAttitude == nil) {
CMDeviceMotion *dm = motionManager.deviceMotion;
referenceAttitude = [dm.attitude retain];
}
}
- (void) stopTrackingMotion
{
[motionManager stopDeviceMotionUpdates];
}
Я хочу взять referenceAttitude, когда я запускаю менеджер движения и используюэто в течение жизни приложения.Иногда мне нужно отслеживать движение, а иногда нет.
Вот поток приложения:
- вызов startTrackingMotion, поскольку я готов к движению
- referenceAttitudeостается сохраненным, и я использую его для отслеживания движения
- Я вызываю stopTrackingMotion, так как собираюсь делать не движущиеся вещи
- приложение делает другие вещи
- Я снова вызываю startTrackingMotionтак как я снова готов к движению
На этом этапе, проходя по коду, я перехожу цикл «if (motionManager == nil)», поскольку он все еще там.Однако каждый раз, когда речь заходит о цикле «if (referenceAttitude == nil)», оператор if принимает значение true.
Не правильно ли я его сохранил?Вызывает ли StopDeviceMotionUpdates мой экземпляр?
Спасибо.