2010-02-28 3 views
0

Une idée de pourquoi sendSynchronousRequest provoque une fuite ci-dessous? Instruments indique que la trame responsable est NSURLConnection et il pointe à NSCFString fuite dans la ligne avec sendSynchronousRequest.Problème de signalement de fuites avec NSURLConnection sendSynchronousRequest

J'ai lu que c'était un problème connu avant OS 2.2 ou quelque chose, mais devrait certainement être corrigé maintenant. Des pensées?

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 

NSURL *url = [NSURL URLWithString:@"http://www.mysite.com/api/v1/dosomething"]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20.0]; 
[request setHTTPMethod:@"POST"]; 

NSData *bodyData; 

[request setValue:@"text/plain" forHTTPHeaderField:@"Content-Type"]; 

NSString *body = @"test"; 
bodyData = [body dataUsingEncoding:NSUTF8StringEncoding]; 

[request setHTTPBody:bodyData]; 
[body release]; 

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

NSHTTPURLResponse *response = nil; 
NSError *error = nil; 
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
NSString *responseString = [[NSString alloc]initWithData:responseData encoding:NSUTF8StringEncoding]; 
+1

L'utilisation d'une connexion synchrone est assez horrible de toute façon. Vous bloquez le thread principal lors d'une opération réseau potentiellement longue. –

+1

Ce que Mike dit est généralement un bon conseil, mais juste pour le nuancer - vous bloquez le thread appelant, qui pourrait ne pas être le fil principal. – nall

+0

@Mike merci pour le conseil, mais je suis totalement conscient et ce n'est certainement pas le fil "principal". C'est un thread d'arrière-plan et j'ai effectivement besoin d'un résultat synchrone pour continuer ce thread. – marcc

Répondre

1

J'ai le même problème dans mon projet. J'écris une nouvelle méthode, et cette méthode rend asynchrousRequest. Après cela, j'appelle la méthode comme ça; performSelector .... waitUntilDone: OUI. Cela a fonctionné pour moi, au moins les fuites sont diminuées.

+0

J'ai débattu en essayant cela ... Bon à savoir si je prends cette approche, cela fonctionnera. – marcc

Questions connexes