Вопрос об автоматическом выпуске / выпуске MKReverseGeocoder в образце Apple CurrentAddress - PullRequest
1 голос
/ 29 апреля 2011

Я смотрю на этот код, взятый прямо из файла MapViewController.m в образце CurrentAddress , доступном на веб-сайте Apple:

- (void)dealloc
{
    [reverseGeocoder release];
    [mapView release];
    [getAddressButton release];

    [super dealloc];
}

- (IBAction)reverseGeocodeCurrentLocation
{
    self.reverseGeocoder =
        [[[MKReverseGeocoder alloc] initWithCoordinate:mapView.userLocation.location.coordinate] autorelease];
    reverseGeocoder.delegate = self;
    [reverseGeocoder start];
}

Мне интересно, для чего предназначена эта функцияАвто-релиз при выделении объекта.(ReverseGeocoder - это ивар в классе MapViewController, настроенный со свойством retain.) У меня есть код, похожий на этот в моем приложении, и, похоже, он работает в любом случае.

1 Ответ

2 голосов
/ 29 апреля 2011

Установка вашего свойства reverseGeocoder увеличивает счетчик удержания (+1), но, поскольку вы создаете объект с помощью alloc + init (+1), вам нужно autorelease (-1), чтобычто вы не получите счет 2.

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

Обратный геокодер - это ивар

Конечно, но обратите внимание, что когда вы используете форму self.reverseGeocoder, вы не получаете прямой доступ к ивару - вместо этого вы 'повторного вызова соответствующей функции setReverseGeocoder:, которая либо написана вами, либо @synthesized компилятором.

См .: http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/MemoryMgmt/MemoryMgmt.html

И: Для чего синтезирован эквивалентный кодобъявленная собственность?

...