1

在更多 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 和 geocoder 添加到自动释放池中?谢谢。

4

1 回答 1

0

这样做是为了避免调用委托方法

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

或者

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

当您释放响应这些CLLocationManager/MKReverseGeocoder协议的对象时

于 2011-12-13T23:30:12.983 回答