2009-12-01 2 views
1

J'ai déjà trouvé beaucoup d'informations sur la façon de résoudre les fuites de mémoire pour iPhone Code Obj C. Les deux dernières fuites me gardent perplexe, je suis probablement en train de négliger quelque chose. Peut-être que vous pouvez le repérer.Fuites de mémoire avec UIWebView et NSURL: déjà passé plusieurs jours à essayer de les résoudre

rapports Instruments 2 fuites pour le code suivant (partie d'une sous-classe de UIViewController):

(1) UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0.0, 
          0.0, 
          self.view.bounds.size.width, 
          self.view.bounds.size.height - LOWER_VERT_WINDOW_MARGIN)]; 
(2) webView.scalesPageToFit = YES; 
(3) webView.dataDetectorTypes = UIDataDetectorTypeNone; 
(4) 
(5) NSURL *url = [NSURL fileURLWithPath:self.fullPathFileName isDirectory:NO]; 
(6) NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL:url]; 
(7) [webView loadRequest:urlRequest]; 
(8) [urlRequest release], urlRequest = nil; 
(9) [self.view addSubview:webView]; 
(10) [webView release], webView = nil; 

Instruments revendications 128 octets sont coulants dans la ligne 1, ainsi que 256 octets dans la ligne 4. Aucune idée si signifie ligne 3 ou ligne 5.

Est-ce que quelqu'un a une idée de ce que je néglige?

+1

Je ne pense pas que vous fuyez quelque chose là-bas (si vous êtes, ce n'est pas votre faute). Vous libérez la vue Web et l'urlRequest comme vous le devriez. L'URL devrait être automatiquement libérée. L'analyse de boîte noire est seulement si bonne ... L'opérateur de virgule me rend triste. – Malaxeur

+0

Pourriez-vous expliquer pourquoi l'opérateur virgule vous rend triste? –

Répondre

5

1) Assurez-vous que vous testez la fuite sur un appareil et non le simulateur

2) À défaut, essayez de régler le cache d'URL en ajoutant ceci à votre applicationDidFinishLaunching dans votre délégué app:

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; 
[NSURLCache setSharedURLCache:sharedCache]; 
[sharedCache release]; 
+2

Vous avez fait ma journée! Hooked l'appareil, a commencé Instruments, et bien sûr: les fuites ci-dessus ne se produisait plus. Je dis seulement deux fuites, et mon logiciel n'était pas impliqué (pas dans la trace de la pile), donc pas de soucis là-bas. Merci! Je n'ai jamais su qu'il y avait une telle différence entre le simulateur et l'appareil en ce qui concerne les fuites. –

+0

J'ai frappé celui-ci il y a quelques mois aussi. google cette ligne nsurlcache et vous verrez quelques informations sur les fuites avec NSURLConnection – Mobs

+0

Vous devez seulement désactiver le cache URL si vous êtes sûr que vous ne voulez pas la mise en cache. La mise en cache est bonne. Ne vous inquiétez pas de quelques octets - surtout si le code de sa pomme. –

Questions connexes