So löschen Sie den Cache aus UIWebview oder dealloc UIWebview

8

Jedes Mal, wenn ich eine neue Seite mit UIWebView lade, wird die vorher geladene Seite für eine kurze Zeit angezeigt.

Wie kann ich diesen Cache löschen? Eine andere Möglichkeit wäre, UIWebview aufzuheben. Ich habe das probiert, aber mein UIWebView ist immer "leer". Wie sollten die alloc und dealloc in diesem Fall gemacht werden?

Ich habe bemerkt, dass die UIWebView ungefähr 10 MB RAM verbraucht. Jetzt wird UIWebView zusammen mit ViewController geladen. Und die Ansicht ist Autoreleased sowie die UIWebView ist Autoreleased. Wäre es nicht besser, das WebView jedes Mal freizugeben?

Lösung:

%Vor%     
testing 10.09.2010, 09:39
quelle

6 Antworten

10

Meine Lösung für dieses Problem bestand darin, das UIWebView programmgesteuert auf viewWillAppear: zu erstellen und es auf viewDidDisappear: wie folgt freizugeben:

%Vor%

Wenn Sie dies tun und Ihr UIWebView nicht freigegeben wird, sollten Sie überprüfen, ob es sich lohnt, zu zählen und zu verstehen, wer es behält.

    
mips 28.09.2010, 22:59
quelle
27

Ich hatte fast das gleiche Problem. Ich wollte, dass der Webview-Cache gelöscht wird, denn jedes Mal, wenn ich eine lokale Webseite in einem UIWebView neu lade, wird der alte angezeigt. Also habe ich eine Lösung gefunden, indem ich einfach die Eigenschaft cachePolicy der Anfrage gesetzt habe. Verwenden Sie NSMutableURLRequest , um diese Eigenschaft festzulegen. Bei allem funktioniert alles gut mit dem Nachladen der UIWebView .

%Vor%

Hoffe das hilft!

    
CopyAndPaster 20.10.2010 11:07
quelle
4

Wenn Sie alle zwischengespeicherten Antworten entfernen möchten, sollten Sie auch Folgendes versuchen:

%Vor%     
Casey Fleser 06.02.2012 22:06
quelle
2

Wenn ich raten musste, ist Ihre Eigenschaft für webView

%Vor%

Korrekt? Der wichtige Teil ist der behalten.

%Vor%

Der obige Code ordnet ein UIWebView (also retainCount = 1) zu und fügt es dann zu self.webView hinzu, wo es erneut gespeichert wird (retainCount = 2).

Ändern Sie den Code wie folgt, und Ihr WebView sollte freigegeben werden.

%Vor%

addSubview: kann nur auf UIViews aufgerufen werden.

%Vor%

sollte

sein %Vor%     
Matthias Bauch 03.10.2010 13:06
quelle
2

Ich habe etwas einfacheres getan, ich habe nur% web_des_% auf 0 auf loadRequest und 1 auf webViewDidFinishLoad gesetzt.

%Vor%

und

%Vor%

(Eigentlich habe ich eine Einblendung, da das Rendern zB einer PDF etwa 1/5 Sekunden dauern kann.)

    
Henrik Erlandsson 19.01.2011 09:52
quelle
0
___ answer3977106 ___

Ich hatte fast das gleiche Problem. Ich wollte, dass der Webview-Cache gelöscht wird, denn jedes Mal, wenn ich eine lokale Webseite in einem %code% neu lade, wird der alte angezeigt. Also habe ich eine Lösung gefunden, indem ich einfach die Eigenschaft %code% der Anfrage gesetzt habe. Verwenden Sie %code% , um diese Eigenschaft festzulegen. Bei allem funktioniert alles gut mit dem Nachladen der %code% .

%Vor%

Hoffe das hilft!

    
___ answer3849859 ___

Wenn ich raten musste, ist Ihre Eigenschaft für webView

%Vor%

Korrekt? Der wichtige Teil ist der behalten.

%Vor%

Der obige Code ordnet ein UIWebView (also retainCount = 1) zu und fügt es dann zu self.webView hinzu, wo es erneut gespeichert wird (retainCount = 2).

Ändern Sie den Code wie folgt, und Ihr WebView sollte freigegeben werden.

%Vor%

addSubview: kann nur auf UIViews aufgerufen werden.

%Vor%

sollte

sein %Vor%     
___ qstnhdr ___ So löschen Sie den Cache aus UIWebview oder dealloc UIWebview ___ answer4733807 ___

Ich habe etwas einfacheres getan, ich habe nur% web_des_% auf 0 auf loadRequest und 1 auf webViewDidFinishLoad gesetzt.

%Vor%

und

%Vor%

(Eigentlich habe ich eine Einblendung, da das Rendern zB einer PDF etwa 1/5 Sekunden dauern kann.)

    
___ tag123iphone ___ Verwenden Sie diesen Tag NICHT, es sei denn, Sie wenden sich speziell an Apple's iPhone und / oder iPod touch. Verwenden Sie für nicht hardwareabhängige Fragen das Tag [ios]. Weitere zu betrachtende Tags sind [xcode] (aber nur, wenn es sich um die IDE selbst handelt), [swift], [objective-c] oder [cacao-touch] (aber nicht [cocoa]). Bitte verzichten Sie auf Fragen zum iTunes App Store oder zu iTunes Connect. Wenn Sie C # verwenden, markieren Sie mit [mono]. ___ tag123objectivec ___ Dieses Tag sollte nur bei Fragen verwendet werden, die sich auf Objective-C-Funktionen beziehen oder von Code in der Sprache abhängen. Die Tags [Kakao] und [Kakao-Touch] sollten verwendet werden, um nach Frameworks oder Klassen von Apple zu fragen. Verwenden Sie die verwandten Tags [ios], [macos], [apple-watch] und [tvos] für Probleme, die für diese Plattformen spezifisch sind. ___ tag123cocoatouch ___ Die Cocoa Touch-Frameworks, die iOS-Apps steuern, teilen viele bewährte Muster, die auf dem Mac gefunden wurden, wurden jedoch mit besonderem Fokus auf Touch-basierte Oberflächen und Optimierung erstellt. ___ antwort10126760 ___

Sie können auch @ "about: blank" laden, nachdem das Webview ausgeblendet wurde, dann ist es beim nächsten Zugriff leer.

    
___ tag123uiwebview ___ Eine Klasse, mit der Webinhalte in einer iOS-Anwendung angezeigt werden. Beachten Sie, dass UIWebView seit iOS 8 veraltet ist. Es wird von Apple empfohlen, stattdessen WKWebView zu verwenden. ___ answer9168029 ___

Wenn Sie alle zwischengespeicherten Antworten entfernen möchten, sollten Sie auch Folgendes versuchen:

%Vor%     
___ answer3817630 ___

Meine Lösung für dieses Problem bestand darin, das %code% programmgesteuert auf %code% zu erstellen und es auf %code% wie folgt freizugeben:

%Vor%

Wenn Sie dies tun und Ihr %code% nicht freigegeben wird, sollten Sie überprüfen, ob es sich lohnt, zu zählen und zu verstehen, wer es behält.

    
___ qstntxt ___

Jedes Mal, wenn ich eine neue Seite mit %code% lade, wird die vorher geladene Seite für eine kurze Zeit angezeigt.

Wie kann ich diesen Cache löschen? Eine andere Möglichkeit wäre, %code% aufzuheben. Ich habe das probiert, aber mein %code% ist immer "leer". Wie sollten die %code% und %code% in diesem Fall gemacht werden?

Ich habe bemerkt, dass die %code% ungefähr 10 MB RAM verbraucht. Jetzt wird %code% zusammen mit %code% geladen. Und die Ansicht ist Autoreleased sowie die %code% ist Autoreleased. Wäre es nicht besser, das WebView jedes Mal freizugeben?

Lösung:

%Vor%     
___
Koen 12.04.2012 15:27
quelle