CLLocationManager, MKReverseGeocoder, очистка памяти - PullRequest
1 голос
/ 06 июня 2011

В книге «Разработка для iPhone 3», после того, как автор завершил метод делегирования locationManager для получения обновлений, он добавляет в конец этого метода:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

    // some code here

    manager.delegate = nil;
    [manager stopUpdatingLocation];
    [manager autorelease];    
}

И аналогично, в MKReverseGeocoder методах делегатов, когда он закончил, он делает это:

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark {

    //some code here

    geocoder.delegate = nil;
    [geocoder autorelease];
}

Зачем вам это нужно для очистки памяти? Я думал, что правило было, если вы размещаете / инициализируете его, вам нужно его освободить. Почему он добавляет locationManager и геокодер в пул автоматического выпуска? Спасибо.

1 Ответ

0 голосов
/ 14 декабря 2011

Это сделано, чтобы избежать вызова методов делегата

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

или

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark

когда вы освобождаете объект, который отвечает на эти CLLocationManager/MKReverseGeocoder протоколы

...