Mein Projekt ist eine hybride statische Bibliothek zum Anzeigen eines UIWebView mit einigen JS zum Steuern der Logik. Wenn ich 64bit benutze und Demo auf iOS 8/iPhone 6 starte, läuft der Speicher auf 30M oder mehr!Speicherleck mit UIWebView
Wenn ich Generation in Instrument verwende, ist die erhöhte Speicherauslastung fast alle von Webcore; Bedeutet es, dass es Lecks im JS-Code gibt? Ich kann kein Leck finden, wenn ich Safari verwende, um ähnliche JS direkt auszuführen.
Wenn ich die UIWebView freigeben, wird der Speicher immer noch nicht freigegeben; Ich habe mit der Instrumentenverteilung getestet. Es gibt einige WebCore und (nicht - Objekt) noch im Speicher, was kann ich tun, um sie zu veröffentlichen?
- 0JavaScriptCore WTF MallocHook :: :: recordAllocation (void *, unsigned long)
- 1 Javascript WTF :: fastMalloc (unsigned long)
- 2 WebCore WebCore :: :: SharedBuffer Puffer() const
- 3 WebCore WebCore SharedBuffer :: :: data() const
- 4 WebCore WebCore :: :: Resource didReceiveDataOrBuffer (char * const unsigned int, WTF :: PassRefPtr, long long, WebCore :: DataPayloadType)
- 5 WebCore WebCore :: SubresourceLoader :: di dReceiveDataOrBuffer (char const *, int, WTF :: PassRefPtr, long long, WebCore :: DataPayloadType)
- 6 WebCore WebCore SubresourceLoader :: :: didReceiveBuffer (WTF :: PassRefPtr, long long, WebCore :: DataPayloadType)
- 7 WebCore WebCore :: :: Resource didReceiveBuffer (WebCore :: ResourceHandle *, WTF :: PassRefPtr, int)
- 8 WebCore WebCore SynchronousResourceHandleCFURLConnectionDelegate :: :: didReceiveDataArray (__ CFArray const *)
I Verwenden Sie den folgenden Code.
Ich habe die folgenden Links recherchiert, aber sie scheinen mein Problem nicht zu lösen. Läuft UIWebview in iOS 8 noch? Und das Problem scheint nicht so offensichtlich, wenn ich iOS 6 in iPhone4 verwende.
Whats the proper way to release a UIWebView?
iOS 8 UIWebView memory management
UIWebView leaks, JS Garbage Collector & WebCore VMs
Release memory/cookie/cache from UIWebView once closed
'WKWebView' erbt nicht von' UIWebView', es ist eine völlig neue und andere Klasse. Wenn Sie nur auf iOS 8 arbeiten, sollten Sie es unbedingt über 'UIWebView' verwenden. Sie sollten auch ARC verwenden. –
@jshier - Danke für den Fang ... Ich habe die Antwort von dem, was ich sagen wollte, bearbeitet (Was sie teilen viele der gleichen Methode Anrufnamen macht es eine sehr einfache Umstellung). –
Vielen Dank für Ihre Lösung, WKWebView funktioniert für meinen Fall! –