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.