web-dev-qa-db-fra.com

Fuite de mémoire iOS 12+ - WKWebView et UIWebView

Ce n'est pas une question, mais je poste ici dans l'espoir que cela sauvera la raison de quelqu'un d'autre (je viens de passer la meilleure partie de la journée à trouver celle-ci). J'ai identifié une fuite de mémoire qui est apparue depuis iOS 12.0+, qui affecte WKWebView et UIWebView. La fuite apparaît dès que vous instanciez l'une des 2 vues Web. Instruments identifie la fuite comme provenant de JavaScriptCore, ce qui explique pourquoi elle affecte également les deux vues Web.

J'essayais de comprendre ce que je faisais mal, quand j'ai décidé d'essayer une ancienne version iOS (11.4 - la version antérieure à 12.0), et j'ai remarqué que la fuite avait disparu. Je peux le reproduire à chaque fois.

Pour reproduire, tout ce que vous devez faire est d'allouer une instance d'une vue Web sur une classe.

let webview = WKWebView()

ou

let webview = UIWebView()

Immédiatement, vous remarquerez 4 fuites sur iOS 12.0/12.1, qui ne sont plus présentes si vous exécutez le code sur iOS 11.4. Il y a 4 fuites distinctes; 3 x 96 octets et 1 x 128 octets.

Leak-WKWebView

J'ai déposé un bug avec Apple via le BugReporter, dupliqué sur Openradar: https://openradar.appspot.com/radar?id=6132657108811776

14
CPR

Même problème ici. Je testais mon application pour toute fuite de mémoire et dès que j'ouvrirai une UIWebView, cela me donnera ces fuites exactes.

Je pensais que cela avait à voir avec le javascript du baseurl mais le mettre à zéro donne le même résultat. Voici ma configuration pour la vue Web:

NSURL *url = [NSURL URLWithString:@"https://example.com"];
[self.webView loadHTMLString: htmlContent baseURL: url];

Hope Apple nous donne bientôt une solution.

3
Null TX