Сделайте недействительным и освободите NSTimer при извлечении представления (с UINavigationController) - PullRequest
0 голосов
/ 13 июля 2011

Я использую UINavigationController: в моем первом представлении есть кнопка UIB, которая выдвигает другое представление, используя этот код

- (IBAction)gototrack:(id)sender {
    map *map2 = [[map alloc] initWithNibName:@"map" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:map2 animated:YES];
    [map2 release];
}

В этом втором виде есть карта, которая указывает положение объекта. Этот объект движется быстро, поэтому мне нужно обновлять позицию каждую секунду: я делаю это с помощью NSTimer, который вызывает метод, который вычисляет новые координаты и обновляет карту. Хорошо, все работает нормально, но когда пользователь открывает окно (с обычной кнопкой на панели навигации), это второе представление не может быть освобождено, потому что NSTimer все еще работает!

Что я могу сделать, чтобы сделать недействительным и освободить NSTimer, когда пользователь открывает это второе представление? Есть ли некоторые методы, вызываемые автоматически? (Я пробовал, но ничего)

Спасибо!

Ответы [ 2 ]

1 голос
/ 13 июля 2011

Вы можете попытаться аннулировать NSTimer в -viewWillDisappear или viewDidDisappear.

viewWillDisappear:

Этот метод вызывается в ответ на удаление представленияиз своего окна или покрыты другим видомЭтот метод вызывается до того, как представление фактически будет удалено или закрыто, и до того, как настроены какие-либо анимации.

Подклассы могут переопределить этот метод и использовать его для фиксации изменений редактирования, изменения статуса первого респондента представления или выполнения других действий.соответствующие задачи.Например, вы можете использовать этот метод, чтобы отменить изменения в ориентации или стиле строки состояния, которые были сделаны в viewDidDisappear: метод, когда представление было впервые представлено.Если вы переопределите этот метод, вы должны вызвать super в какой-то момент вашей реализации.

Посмотрите справку UIViewController для получения более подробной информации.

0 голосов
/ 13 июля 2011

Легко, это так: [// Ваш nstimer // аннулировать];

...