UIWebView unter viel Speicher
In meiner app, wenn ich Sie laden UIWebView
mit jedem Website-url in den Speicher springt von 30mb auf rund 140mb.
Ich bin mit der ARC
und bei der Entlassung der UIWebViewController
[Viewcontroller
enthält UIWebView], die es nicht gibt den Speicher.
Kann jede Stelle mir helfen wie man dieses Problem lösen memory Fragen sowie die bitte auch mir die Zeiger der Speicher bestpractices in ARC
Für das laden der Webseite :-
NSURL *nsurl=[NSURL URLWithString:self.url];
NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
[webview loadRequest:nsrequest];
Für Abweisung der Viewcontroller:-
[self dismissViewControllerAnimated:YES completion:^{
webview.delegate=nil;
webview=nil;
}];
Vielen Dank im Voraus 🙂
Können Sie bitte etwas code wie du das laden der URL. Auch einige code, wo Sie schließen Sie die Ansicht. Es wäre hilfreich für Fehlersuche Ihr Problem.
sorry für die späte Antwort - ich habe den code für die Entlassung der viewcontroller & für die be -
bitte verwenden profiler und Instrumente mit iOS-Gerät an den x-code, verwenden Sie Sie nicht mit Simulatoren...
Ich habe eine einfache text-Seite, und es ist mit etwa 35 MB Speicher =(
Hast du eine Lösung gefunden?
sorry für die späte Antwort - ich habe den code für die Entlassung der viewcontroller & für die be -
bitte verwenden profiler und Instrumente mit iOS-Gerät an den x-code, verwenden Sie Sie nicht mit Simulatoren...
Ich habe eine einfache text-Seite, und es ist mit etwa 35 MB Speicher =(
Hast du eine Lösung gefunden?
InformationsquelleAutor DAMM108 | 2014-03-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
wow, heute treffen wir auch dieses problem. wenn wir versuchen, das laden einer web-Seite, die enthalten viele Bilder oder eine große web-Seite, es ist leicht zum Absturz zu bringen. wir finden auch den Speicher der fast 200M.
schließlich finden wir, wir könnten entfernen Sie die Speicher-cache von web-Ansicht
können Sie es versuchen, wenn Sie empfangen Speicher-Warnung. oder rufen Sie es in der dealloc-Methode hinzu.
wenn es noch einige Probleme haben, versuchen Sie, beschränken Sie die Größe des Arbeitsspeicher-cache-by-call
Glück!
eigentlich legen wir eine kleine Speicherkapazität Größe für die alten Geräte(wie iPhone4), ich weiß nicht, ob es notwendig ist, es zu tun. Haben Sie call [[NSURLCache sharedURLCache] removeAllCachedResponses]; zur Freigabe von web-cache-wenn erhalten-memory-Warnung, denke ich, könnte es funktioniert nachdem Sie das tun.
Soweit ich weiß, Standard-Speicher Kapazität [NSURLCache sharedURLCache] ist nur 20 Mb.
InformationsquelleAutor TinyMonk
Hören nicht auf Sie,
Sein nicht ein problem, Telefone verarbeiten kann, alle, die Speicherauslastung, versuchen Sie es mit einer MKMapView und beobachten Sie Ihre memory-Nutzung steigen.
In Ihrem simulator, versuchen Sie, durch eine low-memory-Warnung
cmd+shift+m
, und sehen, was passiert, können Sie nicht erwarten, dass alle web-Ansichten, um bei der gleichen Speicherauslastung, auch Sie haben eine chance zu geben für Ihr Telefon zu Puffern Sie alle aus.iPhones umgehen kann, so sollten Sie nicht viel sorgen.
Aber Versuch es trotzdem:
Das Verhalten von UIWebViews änderungen, wenn Sie deaktivieren "Erkennt Links" in der nib-Datei, so versuchen Sie Umschalten, und sehen, was passiert.
Sie sind real und schwerwiegend, aber sind entworfen, um die Last zu bewältigen, und verwalten Sie die Datennutzung aus, wenn erforderlich
Der Speicherverbrauch ist einfach zu hoch und verursacht Häufig Abstürze, alle apps laufen über UIWebView. Es ist ein echtes problem!
InformationsquelleAutor MrHaze
UIWebViewController
live im Speicher. (Cmd + I in Xcode, lassen Instrumente zu öffnen, wählen Sie die Zuweisungen, und geben Sie UIWebViewController in der Suchleiste)UIWebViewController
Objekt anmehr als ein Ort.
Ja, Sie können implementieren Sie die Methode auch mit BOGEN, nur, dass Sie kann nicht aufgerufen
[super dealloc]
. Auch meinte ich, legte ein Protokoll in der dealloc Umsetzung Ihrer viewcontroller.versucht, diese -(void)dealloc { NSLog(@"Deaalloc");}, aber es nicht nennen dealloc-Methode hinzu
Wird es aufgerufen? Wenn Nein, würde ich vorschlagen, dass Sie versuchen, mit Instrumenten zu sehen, wenn die webview ist live auch nach dealloc genannt wird.
Nicht dealloc wird nicht aufgerufen
InformationsquelleAutor rounak
Ist es nicht sinnvoll, die Suche nach einem problem, bis Sie sicher sind, dass ein problem existiert.
Gibt es zwei Möglichkeiten, warum die Speicherauslastung so hoch ist:
1.UIWebView ist nicht freigegeben.
2.Es ist ein system caching oder einige bestimmte iOS-memory-processing-Algorithmus.
Im zweiten Fall kannst du nichts tun. Um zu überprüfen, ersten Fall können Sie versuchen, zu verwenden, - Instrumente oder einfach nur Unterklasse UIWebView und fügen Sie Protokollierung in dealloc-Methode hinzu.
Vergessen Sie nicht, zu ändern UIWebView zu MyUIWebView in Ihrem code.
Werden und nur wenn Sie sich sicher sein, dass UIWebView nicht freigegeben ist, sollten Sie sich auf die Suche nach starken Zeigern behalten, Kreise und so weiter.
InformationsquelleAutor Avt
hinzufügen
vor dieser Zeile
null-ing webView sollte gesorgt werden, die von ARC. Bezieht sich nicht auf die web-Ansicht in der Abschluss-block.
benötigen Sie mehr code oder eventuell das ganze Projekt auf Github, falls Sie weitere Hilfe benötigen. Schwer zu verstehen, wo das problem liegt, ohne zu wissen, den code.
InformationsquelleAutor Nitin Alabur
Ich denke, Sie vergessen zu entfernen, die UIWebView von der view-Hierarchie. Dies würde bewirken, dass eine zusätzliche bewahren Anzahl und verhindern, dass der Speicher aus zurückgefordert, wenn Sie null würde das Eigentum.
wenn (viewSourceWebView.isLoading){ [viewSourceWebView stopLoading]; } [viewSourceWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]; viewSourceWebView.delegate=nil; [viewSourceWebView removeFromSuperview];
ist etwas, was ich falsch mache ?
wahrscheinlich ist die web-Ansicht ist nicht immer freigegeben. d.h. es muss einen retain-Zyklus
InformationsquelleAutor Sam
Nur einige Dinge, die Sie überprüfen sollten:
strong
Verweis auf seineview
, und diese Ansicht behält alle Untersichten, solange Sie halten Sie in der view-Hierarchie, so dass jede zusätzliche Eigenschaften solltenweak
einschließlich IhrerwebView
Eigenschaft.nil
" alles. ARCnil
alle seinestrong
Verweise aufdealloc
automatisch.weak
Verweise weder. Außerdem auf iOS 5+weak
Referenzen werdennil
automatisch, wenn das referenzierte Objekt wird freigegeben woanders.Ich denke, dass die meisten wahrscheinlich Ihr ganzes view-controller wird immer beibehalten, irgendwo, und damit seine
view
und diewebView
.Stellen Sie sicher, das Sie nur halten
weak
Verweise auf den controller und lass es sein, gehalten von einem container oder Präsentation-controller, so wird es automatisch freigegeben, solange wird es geholt oder entlassen.InformationsquelleAutor Rivera
Ich hatte das gleiche problem, in meiner Anwendung. Ich würde empfehlen, dass Sie verwenden sollten, WKWebView. WKWebView wurde eingeführt mit iOS 8.
Sie können mehr darüber Lesen Sie hier
apple-Dokumentation
Dem Speicher-Problem ist definitiv gelöst. Sie erhalten alle Funktionen von webview und einige mehr(also Fortschritt). Hoffe, das hilft
InformationsquelleAutor rv7284
Wenn Sie möchten, verringern Sie den Speicherverbrauch von UIWerview sofort, können Sie versuchen:
1.
oder
2.
oder
3.
Es funktionierte für mich.
InformationsquelleAutor JimmyChang