Утечки в NSURLConnection - PullRequest
       15

Утечки в NSURLConnection

0 голосов
/ 22 июня 2010

Я много гуглил и много читал о проблеме утечек с NSURLConnection, но ни один из них не дает однозначного ответа относительно того, как решить эти утечки.Я создаю асинхронное соединение и каждый раз, когда соединение устанавливается, я получаю утечку GeneralBlock-3584.Иногда ответственной библиотекой считается кадр Foundation [NSThread start].Некоторые экземпляры GeneralBlock-3584 имеют CFNetwork HostLookup_Master :: HostLookup_Master (__ CFString const *, InheritEnum <_ExtendedHostInfoType, CFHostInfoType>, __CFHost *, CFStreamError *) в качестве ответственного фрейма.Я попытался установить размер NSURLCache на 0, как это было предложено некоторыми.Однако даже это не работает.

Вот как выглядит мой класс соединителя:

-(void) connectToUrl:(NSString*)urlStr withDelegate:(id)theDelegate{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url = [NSURL URLWithString:urlStr];

    NSMutableURLRequest *request  = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"GET"];
    [request setValue:@"application/xml" forHTTPHeaderField:@"Content-Type"];
    self.delegate = theDelegate; 

    [[NSURLCache sharedURLCache] setMemoryCapacity:0];
    [[NSURLCache sharedURLCache] setDiskCapacity:0];

    [NSURLConnection connectionWithRequest:request delegate:self];
    [pool release];


}


- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    if(xmlResponse == nil){
        xmlResponse = [[NSMutableString alloc] initWithData:data encoding:NSISOLatin1StringEncoding]; 
    }
    else{
        NSMutableString *temp = [[NSMutableString alloc] initWithData:data encoding:NSISOLatin1StringEncoding];
        [xmlResponse appendString:temp];
        [temp release];
    }

}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{

    [[NSURLCache sharedURLCache] setMemoryCapacity:0];
    [[NSURLCache sharedURLCache] setDiskCapacity:0];
    [self.delegate connectionDidFinish:self];

}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{

    [self.delegate connectionDidFail:self]; 

}

И я вызываю connectToUrl этого класса соединителя: (NSString *) urlStr withDelegate :(id) метод Delegate, как показано ниже:

Connector *con = [[Connector alloc] init];
[con connectToUrl:urlStr withDelegate:self];

Я освобождаю 'con' в методах connectionDidFinish и connectionDidFail класса делегата.

Пожалуйста, предложите решение для утечек GeneralBlock-3584.Я долго ломал себе голову.

1 Ответ

0 голосов
/ 28 июля 2010

Утечки исчезли со времен iOS4.

...