выдача ревергейокодера - PullRequest
       18

выдача ревергейокодера

0 голосов
/ 03 сентября 2011

Я учусь использовать классы mkreversegeocoder и заставить его работать, используя следующие три строки кода и реализуя метод didFindPlacemark.

geoCoder = [[MKReverseGeocoder alloc] initWithCoordinate:[u coordinate]];
[geoCoder setDelegate:self];
[geoCoder start];

Вышеописанное работает отлично, однако ... пытаясь улучшить свое приложение, думая об управлении памятью и ресурсами, я пытаюсь добавить автоматическое освобождение выделения геокодера следующим образом:

geoCoder = [[[MKReverseGeocoder alloc] initWithCoordinate:[u coordinate]] autorelease];

Вышеуказанный шаблон используется Apple в их документации, поэтому кажется, что это правильно. Однако, когда я добавляю авто-релиз, метод didFindPlacemark никогда не вызывается. Это как если бы autorelease немедленно освобождает объект geoCoder.

Объект geoCoder объявлен как ivar, поэтому он должен работать. Пример Apple, использующий этот шаблон, работает, поэтому проблема должна быть с моей реализацией, но я не могу понять, где я иду не так.

Буду признателен всем, кто расскажет о том, что происходит и как я могу это сделать.

С наилучшими пожеланиями

1 Ответ

1 голос
/ 03 сентября 2011

Вы определили свойство сохранения для geoCoder, как в примере приложения Apple CurrentAddress?

В их примере приложения геокодер устанавливается с помощью средства доступа к свойству , в противном случае авто-релиз будетотпустите ивар при выходе из метода.

Измените эту строку на:

self.geoCoder = [[[MKReverseGeocoder alloc] initWith...] autorelease];

Также обязательно выпустите ее в dealloc:

- (void)dealloc
{
    [geoCoder release];
    [super dealloc];
}
...