Libérer les ressources iOS UIWebView après utilisation

L'écran d'accueil de notre application (et donc le premier vu par tous les users) comporte plusieurs sections, dont la plupart contiennent des vues Web différentes que l'user peut vouloir ouvrir. Cela augmente l'utilisation de la memory d'à peine 26 Mo jusqu'à 85 Mo ou même plus (après l'ouverture de toutes les vues Web différentes).

Le problème que nous avons constaté est que, une fois qu'elles sont fermées, toutes les ressources de la page Web semblent être conservées en memory (la memory utilisée diminue à peine quelques Mo, peut-être).

Je voudrais libérer les ressources que le webview a dû ouvrir parce que, plus tard, il y a une section très exigeante de notre application qui a besoin de beaucoup de memory et bloque complètement l'application si vous avez commencé à naviguer sur plusieurs de ces webviews avant.

J'ai trouvé plusieurs options sur Internet pour essayer, mais aucun d'entre eux ont travaillé jusqu'à présent. Des choses telles que:

// Try to clean used webview [self.webView loadHTMLSsortingng:@"" baseURL:nil]; [self.webView stopLoading]; self.webView.delegate = nil; [self.webView removeFromSuperview]; self.webView = nil; 

Ils n'ont absolument aucun effet sur l'utilisation de la memory. Y a-t-il quelque chose qui me manque ici? J'ai déjà vérifié que je n'ai pas de fuites qui laisserait le WebView ouvert, je libère déjà la seule reference que j'ai ( self.webView = nil; )

Edit: Je viens de créer un projet à partir de rien, j'ai ajouté un webview et un button qui charge un web différent chaque fois que je clique dessus, ce qui augmente l'utilisation de la memory. J'ai également ajouté un button qui va détruire le webview quand on clique dessus et, devinez quoi, la memory rest la même, comme si elle ne libérait effectivement aucune ressource.

Cela fait plusieurs mois que j'ai posé cette question et il semble que personne ne connaisse de travail, alors je me suis contenté de répondre pour la fermer et, malheureusement, de mauvaises nouvelles pour ceux qui ont le même problème.

Nous avons continué à essayer de lutter contre ce problème pendant plusieurs jours et, après avoir parlé à des gens qui nous ont laissé entendre que nous n'avions rien à faire (c'est un process différent qui s'occupe de tout ce à quoi nous n'avons pas access), nous avons décidé de restreindre l'access au Webview aux pages personnalisées.

Par exemple, nous avons eu une section de nouvelles qui a ouvert des sites Web sur Internet. Ce que nous avons fini par faire était des pages web personnalisées qui contenaient le titre, le corps et une image liée aux nouvelles (ce qui ajoute encore à l'utilisation de la memory de ressources, mais nous avons réussi à le garder dans un petit format confiné nouvelles à ouvrir pour être de tout danger). Je sais, pas idéal.

J'aimerais toujours voir des réponses constructives à cette question, qu'il s'agisse d'une solution, d'une solution de contournement ou de toute autre idée susceptible d'aider les futurs users de ce même problème à find des solutions à ce problème.

vous devriez lire cet article de Jason Baker,

http://www.codercowboy.com/code-uiwebview-memory-leak-prevention/

Il a créé une category qui m'a vraiment aidé à réduire l'empreinte memory d'UIWebView.

vous avez juste à appeler deux lignes après l'ajout de la catégorie

 -(void) dealloc { [self.webview cleanForDealloc]; self.webview = nil; [super dealloc]; } 
 override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) categoryWebView.stopLoading() categoryWebView.removeFromSuperview() categoryWebView = nil URLCache.shared.removeAllCachedResponses() URLCache.shared.diskCapacity = 0 URLCache.shared.memoryCapacity = 0 if let cookies = HTTPCookieStorage.shared.cookies { for cookie in cookies { HTTPCookieStorage.shared.deleteCookie(cookie) } } }