2010-06-22 4 views
0

J'ai beaucoup recherché sur Google et beaucoup lu sur le problème des fuites avec NSURLConnection, mais aucun d'entre eux ne donne une réponse définitive à la question de savoir quelle est la solution pour surmonter ces fuites. Je crée une connexion asynchrone et chaque fois que la connexion est établie, j'obtiens une fuite GeneralBlock-3584. Parfois, la bibliothèque responsable apparaît comme étant le cadre Foundation [NSThread start]. Certaines instances de GeneralBlock-3584 ont CFNetwork HostLookup_Master :: HostLookup_Master (__ CFString const *, InheritEnum < _ExtendedHostInfoType, CFHostInfoType>, __CFHost *, CFStreamError *) comme cadre responsable. J'ai essayé de définir la taille de NSURLCache à 0 comme suggéré par certains. Cependant, même cela ne fonctionne pas.Fuites dans NSURLConnection

Voici ce qui ressemble ma classe de connecteur comme:

-(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]; 

} 

Et j'appelle ce connecteur de connectToURL de classe: (NSString *) urlStr withDelegate: (id) Méthode de theDelegate comme ci-dessous:

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

Je libère 'con' dans les méthodes connectionDidFinish et connectionDidFail de la classe delegate.

Veuillez suggérer une solution pour les fuites GeneralBlock-3584. Je me suis creusé la cervelle pour longtemps.

Répondre

0

Les fuites ont disparu depuis iOS4.