3

Bonjour une autre question stupide concernant les fuites et aussi NSURLConnection. Comment puis-je le libérer? Est-ce suffisant si je libère dans les 2 méthodes suivantes? Parce que dans les instruments, il me montre la ligne où j'ai alloué ma connexion comme source de fuite.NSURLConnection montrée comme une fuite dans les instruments

:

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

Ceci est la ligne que les instruments me poInts (EDIT1 OK Je ne comprends pas après le code suivant mon URLConnection a conserver le nombre de 2. WTF.?).

EDIT2: voici quelques code:

Je crée la connexion ici

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

je libère ici

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

} 

Ou ici

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

EDIT3: Problème résolu en ne se souciant pas si ça fuit ou pas! Simple!

+1

Si vous publiez du code source, il sera beaucoup plus facile de vous donner une réponse correcte à la question –

+0

Eh bien je fais une connexion, tout de suite il a rc: 2 (!). Avant de libérer dans les gestionnaires d'événements d'erreur ou de succès il a encore 2 rc. –

+0

BTW si je fais une version supplémentaire juste après allocation, il me donne un EXC_BAD_ACCESS dans connectionDidFinishLoading :) –

Répondre

3

Vous avez raison de le publier dans les méthodes de délégué, cependant les outils d'analyse comme les instruments et l'analyseur de clang ne sont pas assez intelligents pour traiter cela et signaler un faux positif. Je serais enclin à faire un bug avec apple, ce sera certainement un doublon mais je leur dirai que plus de développeurs trouvent ça ennuyant.

+0

Merci. J'ai aussi trouvé étrange qu'un projet d'iPhone totalement vide "View based project" avec quelques contrôles tels que le champ de texte, les boutons, les commutateurs ajoutés soit signalé par les instruments qu'il fuit la mémoire. Au moins il devrait y avoir une case à cocher intitulée "mes fuites seulement", ou quelque chose de similaire, je me soucie de mes fuites seulement. Il a rapporté quelques vraies fuites de mémoire que j'ai corrigées mais il y avait quelques suspicios très, comme celui-ci –

+0

@Gyozo: droit. Les fuites sont conçues de telle sorte qu'elles génèreront des faux + plus souvent que vous le souhaiteriez, mais heureusement, elles n'ont pas trop de fausses -ves. Il est également possible qu'UIKit ait réellement des fuites, mais l'outil n'est pas précis à 100%. –

Questions connexes