J'ai une classe pour la connexion avec httprequests. Je reçois une fuite de mémoire pour « NSMutableData » altho Je publie dans « didFailWithError » et « connectionDidFinishLoading » de l'objet de connexion:fuite de mémoire avec NSMutableData
- (BOOL)startRequestForURL:(NSURL*)url {
[url retain];
NSMutableURLRequest* urlRequest = [[NSMutableURLRequest alloc] initWithURL:url];
// cache & policy stuff here
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setHTTPShouldHandleCookies:YES];
NSURLConnection* connectionResponse = [[[NSURLConnection alloc] initWithRequest:urlRequest delegate:self] autorelease];
if (!connectionResponse)
{
// handle error
return NO;
} else {
receivedData = [[NSMutableData data] retain]; // memory leak here!!!
}
[url release];
[urlRequest release];
return YES;}
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error {
UIAlertView *alert =
[[[UIAlertView alloc]
initWithTitle:NSLocalizedString(@"Connection problem", nil)
message:NSLocalizedString(@"A connection problem detected. Please check your internet connection and try again.",nil)
delegate:self
cancelButtonTitle:NSLocalizedString(@"OK", nil)
otherButtonTitles:nil, nil]
autorelease];
[alert show];
[connectionDelegate performSelector:failedAction withObject:error];
[receivedData release];}
- (void)connectionDidFinishLoading:(NSURLConnection*)connection {
[connectionDelegate performSelector:succeededAction withObject:receivedData];
[receivedData release];}
Merci pour votre réponse. J'ai essayé votre solution et la fuite de mémoire est toujours là. (J'avais l'objet receicvedData dans le fichier .h avec retain.J'ai libéré dans dealloc et dans la connexion échouez/j'ai réussi le 'self.receivedData = nil;'. Je l'ai également initialisé comme vous l'avez dit: 'self.receivedData = [NSMutableData data]; 'En passant - mes tests sont dans les instruments xcode –
Vous faites quelque chose avec receivedData ailleurs, pouvez-vous montrer ce code aussi? – jrturton
Je l'utilise dans les méthodes de connexion:' [receivedData setLength: 0]; 'et' [receivedData appendData: données]; ' –