2010-06-16 2 views
7

En utilisant des instruments sur l'appareil, il détecte une fuite de mémoire de 3,50 Ko à l'aide du code Accessibilité 2.0 d'Apple dans mon application. L'objet fuit est GeneralBlock-3584. Les points d'outil de fuites dans le code suivant:Fuite de mémoire importante à l'aide de l'accessibilité

- (BOOL) startNotifer 
{ 
    BOOL retVal = NO; 
    SCNetworkReachabilityContext context = {0, self, NULL, NULL, NULL}; 
    if(SCNetworkReachabilitySetCallback(reachabilityRef, ReachabilityCallback, &context)) 
    { 
     // THIS IS LINE OF CODE WHERE THE LEAK OCCURS: 
     if(SCNetworkReachabilityScheduleWithRunLoop(reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode)) 
     { 
      retVal = YES; 
     } 
    } 
    return retVal; 
} 

Je suis à peu près en utilisant l'exemple à partir du code joignabilité exemple d'Apple droite je ne peux pas comprendre pourquoi ce qui se passe ou comment je résoudre ce problème.

Répondre

6

GeneralBlock-3584 fuites sont, selon les déclarations officielles d'Apple sur les forums de développeurs (vérifier http://devforums.apple.com, et l'esprit de vos NDAs), pas une vraie fuite et en fait un bogue dans Instruments.

1

Essayez d'emballer votre objet Accessibilité avec NSAutoReleasePool. s'il existe encore, essayez de réduire la fuite avec le autoreleasepool.

+1

Pourquoi? A moins que vous n'ayez forké votre propre thread, il y a un NSAutoReleasePool autour. Envelopper ça ne aiderait pas. – GorillaPatch

0

Je pense que c'est un problème similaire à ce question. En fait, il semble que c'est un bug dans CFNetwork et cela dépend de l'OS, donc il n'y a pas de solution de contournement. Apple doit le réparer.