Я запустил поток с задержкой, используя performSelector
, но у пользователя все еще есть возможность нажать кнопку "Назад" в текущем представлении, вызывая вызов dealloc. Когда это происходит, кажется, что мой поток все еще вызывается, что приводит к сбою приложения, поскольку свойства, которые этот поток пытается записать, были освобождены. Чтобы решить эту проблему, я пытаюсь позвонить cancelPreviousPerformRequestsWithTarget
, чтобы отменить предыдущий запрос, но, похоже, он не работает. Ниже приведены некоторые фрагменты кода.
- (void) viewDidLoad {
[self performSelector:@selector(myStopUpdatingLocation) withObject:nil afterDelay:6];
}
- (void)viewWillDisappear:(BOOL)animated {
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(myStopUpdatingLocation) object:nil];
}
Я что-то здесь не так делаю? Метод myStopUpdatingLocation
определен в том же классе, в котором я вызываю запросы на выполнение.
Еще немного фона. Функция, которую я пытаюсь реализовать, заключается в том, чтобы находить местоположение пользователей, искать в Google некоторые местоположения вокруг этого местоположения и отображать несколько аннотаций на карте. На viewDidLoad
я начинаю обновлять местоположение с CLLocationManager
. Я строю тайм-аут через 6 секунд, если я не получаю желаемую точность в течение тайм-аута, и я использую performSelector
для этого. Что может произойти, если пользователь нажмет кнопку «Назад» в представлении, и этот поток все равно будет выполняться, даже если все мои свойства были освобождены, что привело к сбою.
Заранее спасибо!
Джеймс