NSURLConnection показано как утечка в инструментах - PullRequest
3 голосов
/ 18 июня 2010

Здравствуйте, еще один глупый вопрос, касающийся утечек, а также NSURLConnection.Как мне выпустить это?Достаточно ли этого, если я выпущу следующие 2 метода?

(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
(void)connectionDidFinishLoading:(NSURLConnection *)connection

Потому что в инструментах он показывает мне строку, где я выделяю свое соединение как источник утечки.

(РЕДАКТИРОВАТЬ1: ОК, я не понимаю. После следующего кода мойurlConnection имеет счет сохранения 2. WTF?)

NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest: urlRequest delegate: self];

Это строка, на которую указывают мне инструменты.

EDIT2: вот некоторый код:

Iсоздайте соединение здесь

- (void) makeRequest
{

    //NSString *urlEncodedAddress = [self.company.street stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

    NSString *urlString = [[NSString alloc] initWithFormat:
                               @"http://maps.google.com/maps/api/geocode/xml?latlng=%f,%f&sensor=false",
                               bestEffort.coordinate.latitude,bestEffort.coordinate.longitude];
    debugLog(@"%@",urlString);

    NSURL *url = [[NSURL alloc] initWithString: urlString];
    [urlString release];
    NSURLRequest *urlRequest = [[NSURLRequest alloc] initWithURL: url];
    [url release];
    NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest: urlRequest delegate: self];
  debugLog(@"connection created %@ rc %i", urlConnection, urlConnection.retainCount);
    [urlRequest release];
    connection = urlConnection;
}

Я освобождаю его здесь

-(void)connection:(NSURLConnection *)_connection didFailWithError:(NSError *)error
{
    debugLog(@"ERROR with the connection: %@", error.localizedDescription);
    //[activityIndicator setHidden:YES];

  debugLog(@"connection will be released or else %@ %i", _connection, [_connection retainCount]);

    [connection release];
    connection = nil;
    [webData release];
    webData = nil;

    if (!cancel)
        [delegate rgc_failedWithError: self : error];

    isWorking = FALSE;

}

Или здесь

-(void)connectionDidFinishLoading:(NSURLConnection *)_connection
{
  debugLog(@"connection will be released (or else) %@ %i", _connection, [_connection retainCount]);

    [connection release];
    connection = nil;

    debugLog(@"DONE. Received Bytes: %d", [webData length]);
    //NSString *theXML = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
    //debugLog(@"%@",theXML);
    //[theXML release];
        .....
        .....
}

РЕДАКТИРОВАТЬ3: Проблема решена, не заботясь о том, протекает она или нет!Простой!

1 Ответ

3 голосов
/ 18 июня 2010

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

...