Утечка памяти при использовании диспетчера местоположения - PullRequest
2 голосов
/ 05 октября 2011

Я использую диспетчер местоположения с "didUpdateToLocation".У меня утечка памяти, которую я не могу объяснить:

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

[newLocation retain];


 NSString *lCoordinates = [[NSString alloc] initWithFormat:@"%f,%f",newLocation.coordinate.latitude,newLocation.coordinate.longitude];//Memory leak here!!!

[self setLocationCoordinates:lCoordinates];

[lCoordinates release];

NSString *lat = [[NSString alloc] initWithFormat:@"%f,%f", newLocation.coordinate.latitude,newLocation.coordinate.longitude];



[lm stopUpdatingLocation];


NSMutableString  *s = [[NSMutableString alloc]initWithFormat:@"https://maps.googleapis.com/maps/api/place/search/json?location=%@&radius=10&sensor=true&key=---MyKey---", lat];



NSLog(s);


id delegate = self;
AsyncConnectionController * connectionController = [[[AsyncConnectionController alloc] initWithDelegate:delegate
                                                                                           selSucceeded:@selector(currentLocationConnectionSucceeded:)
                                                                                              selFailed:@selector(currentLocationconnectionFailed:)] autorelease];

NSURL *url = [[NSURL alloc] initWithString:s]; 

[connectionController startRequestForURL:url];

[lat release];
[s release];
[url release];

[newLocation release];

}

Спасибо всем за помощь !!!

1 Ответ

1 голос
/ 05 октября 2011

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

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

    NSString *lCoordinates = [NSString stringWithFormat:@"%f,%f",newLocation.coordinate.latitude,newLocation.coordinate.longitude];
    [self setLocationCoordinates:lCoordinates];

    NSString *lat = [NSString stringWithFormat:@"%f,%f", newLocation.coordinate.latitude,newLocation.coordinate.longitude];

    [lm stopUpdatingLocation];

    NSString  *s = [NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/place/search/json?location=%@&radius=10&sensor=true&key=---MyKey---", lat];
    NSLog(s);

    AsyncConnectionController * connectionController = [[[AsyncConnectionController alloc] initWithDelegate:self
                                                                                               selSucceeded:@selector(currentLocationConnectionSucceeded:)
                                                                                                  selFailed:@selector(currentLocationconnectionFailed:)] autorelease];

    NSURL *url = [NSURL urlWithString:s];
    [connectionController startRequestForURL:url];
}

OP указывает, что connectionController является авто-выпуском.

...