На первой строке вы alloc
менеджер местоположения.Это означает, что у вас есть эта ссылка, и вы должны освободить ее, когда закончите.
Вам нужно либо освободить диспетчер местоположений, когда вы закончили его настройку:
// ...
locationManager.headingFilter = 2; // 2 degrees
[locationManager release];
, либо выполнить автоматический выпускон находится в той же строке, что и вы:
CLLocationManager *locationManager = [[[CLLocationManager alloc] init] autorelease];
Сказав это, вы, вероятно, должны хранить менеджер местоположений в переменной экземпляра, чтобы в какой-то момент вы могли остановить обновления местоположения.В противном случае self
может быть освобожден, и менеджер местоположения продолжит отправлять сообщения этому освобожденному объекту.Это приведет к сбою.
После создания переменной экземпляра ваш dealloc, вероятно, должен иметь следующее значение:
- (void)dealloc
{
// ...
locationManager.delegate = nil;
[locationManager stopUpdatingLocation];
[locationManager release];
// ...
[super dealloc];
}
Очистка делегата позволит менеджеру местоположения не отправлять нам никаких сообщений.как только мы были освобождены.Затем мы останавливаем обновления местоположения и выпускаем переменную экземпляра, потому что она нам больше не нужна.