2010-06-25 5 views
1

rapports instrument fuite pour cette simple utilisation de NSURLConnection:Avec proxy, les fuites NSURLConnection pour les URL https

#import <Foundation/Foundation.h> 
int main (int argc, char ** argv) 
{ 
    NSAutoreleasePool *pool = [NSAutoreleasePool new]; 
    NSURLRequest *theRequest = [NSURLRequest 
     requestWithURL:[NSURL URLWithString:@"https://gmail.com/"] 
     cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
     timeoutInterval:60.0]; 
    [NSURLConnection connectionWithRequest:theRequest delegate:nil]; 
    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:5]]; 
    [pool drain]; 
    [NSThread sleepForTimeInterval:10]; // wait for Instruments to check 
} 

fuite trace de la pile:

0 CoreFoundation __CFBasicHashRehash 
    1 CoreFoundation CFDictionaryCreate 
    2 CFNetwork _getConnectionInfoForProxy 
    3 CFNetwork HTTPProtocol::createStream() 
    4 CFNetwork HTTPProtocol::createAndOpenStream() 
    5 CFNetwork executionContextPerform(void*) 
    6 CoreFoundation __CFRunLoopDoSources0 
    7 CoreFoundation __CFRunLoopRun 
    8 CoreFoundation CFRunLoopRunSpecific 
    9 CoreFoundation CFRunLoopRunInMode 
    10 Foundation +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:] 
    11 Foundation -[NSThread main] 
    12 Foundation __NSThread__main__ 
    13 libSystem.B.dylib _pthread_start 
    14 libSystem.B.dylib thread_start 

Il ne fuit pas si l'URL est tout à fait normal http et il ne redirige pas vers un site https.

Comment réparer la fuite? J'utilise Snow Leopard et j'ai des proxies pour http et https.

Répondre

0

Je pense que vous posez les mauvaises questions. Voici ce que vous devriez demander:

  1. Est-ce que je suis les règles de gestion de la mémoire?
  2. Si je le suis, ai-je besoin de m'inquiéter à ce sujet?

Dans votre cas, les réponses sont (respectivement) "Oui" et "Non". Il est tout à fait possible que vous ayez trouvé une fuite de mémoire dans les frameworks Cocoa. Cependant, dans ce cas, je ne pense pas que vous avez. Vous voyez, le NSRunLoop pour le thread actuel conserve le NSURLConnection, il est donc possible que vous ne donniez pas assez de temps à la boucle d'exécution pour libérer la connexion ou quelque chose.

Le point est, vous êtes ne faisant rien de mal, alors ne paniquez pas.

+0

Peu importe le temps que je donne à la boucle d'exécution. Il fuit toujours. –

+0

@davidlin donc? * vous * n'avez rien fait de mal, donc la fuite (si c'est une vraie fuite) n'est pas votre problème et peut être corrigé dans un prochain système mis à jour. essayer de coder autour maintenant serait un casse-tête et pourrait casser votre code à l'avenir quand il peut (ou ne peut pas) être réparé. –

+0

@davidlin aussi, j'ai couru le code que vous avez fourni ci-dessus et Instruments n'a pas signalé une fuite. –

Questions connexes