Ich verwende eine UIWebView
in meiner App. Es funktioniert normalerweise gut, aber es gibt eine Situation, in der die App eine Speicherwarnung erhält und schließlich abstürzt.
Ich lade den Inhalt mit diesem:
%Vor% Es gibt einen Fall, in dem htmlString
mehr als 25 YouTube-Videos enthält (das ist nicht meine Idee - es ist die Webseite, die ich empfange). In diesem Fall empfängt die App also einige Speicherwarnungen und stürzt schließlich ab.
Wie kann ich diese Situation bewältigen? Ist es möglich, die HTML-Datei in verschiedenen Schritten zu laden?
Ich weiß nicht, ob das etwas damit zu tun hat, aber ich setze die UIWebView
size - und auch die Inhaltsgröße einer Scroll-Ansicht, die die Web-Ansicht umschließt - dynamisch. Dies ist der Code:
Vielen Dank
Carlos
Wie wäre es mit einem ungezogenen kleinen Trick? Holen Sie sich das HTML der Seite mit dem folgenden Code:
%Vor%Verwenden Sie Regex, um Videoelemente zu finden, und ersetzen Sie sie durch Ihr benutzerdefiniertes Bild-Hyperlink-Tag & gt ;. Zeigen Sie die HTML-Zeichenfolge wie folgt an:
%Vor%Harte Situation. Wenn Sie sicher sind, dass Ihr Code nicht die Ursache ist (verwenden Sie Instrumente, um nach Lecks zu suchen); dann ist Ihre nächste beste Wette vielleicht, den Absturz zu vermeiden. Ein paar Möglichkeiten kommen mir in den Sinn:
1) Wenn Sie die Speicherwarnung erhalten, könnten Sie möglicherweise:
%Vor% 2) Wenn das nicht funktioniert, können Sie möglicherweise return NO
in UIWebViewDelegate
webView:shouldStartLoadWithRequest:navigationType:
nach einer Speicherwarnung beenden, um zu verhindern, dass die Seite weiterhin schwere Ressourcen einzieht.
3) Als letzten Ausweg stoppen Sie das Laden der Webansicht, entfernen Sie es aus Ihrer Ansicht und geben Sie es frei.
Hoffe einer von denen wird funktionieren. Kannst du die Seite teilen, die dich zum Absturz bringt? Klingt hilfreich für Testzwecke! Außerdem sollten Sie eine Datei mit Apple einreichen, falls Sie diese auf einer niedrigeren Ebene ansprechen möchten.
Es scheint, dass 25 YouTube-Videos in einer einzelnen HTML-Seite zu viel sind: Speicher füllt sich und die App wird getötet.
Ich bezweifle, dass es viel zu tun gibt, wenn Sie nicht bereit sind, das Design Ihrer HTML-Seite zu ändern. Aber wenn Sie bereit sind, dann gibt es viele Möglichkeiten. Z. B. könnten Sie eine Lazy-Last des HTML (über Javascript) implementieren, so dass nur eine Handvoll von Videos jemals angezeigt wird (wie in einem UITableView). Oder Sie ersetzen den HTML-Code, der mit youtube verlinkt ist, durch einen anderen "leichteren" und laden Sie dann einen neuen UIWebView, um ein bestimmtes Video anzusehen. Etc.
Tags und Links ios memory-management uiwebview