Ich denke tatsächlich, dass es zwischengespeicherte Informationen behalten kann, wenn Sie das schließen UIWebView
. Ich habe versucht, ein UIWebView
aus meinem zu entfernen UIViewController
, es freizugeben und dann ein neues zu erstellen. Der Neue erinnerte sich genau daran, wo ich mich befand, als ich zu einer Adresse zurückkehrte, ohne alles neu laden zu müssen (er erinnerte sich, dass mein Vorgänger UIWebView
angemeldet war).
Also ein paar Vorschläge:
[[NSURLCache sharedURLCache] removeCachedResponseForRequest:NSURLRequest];
Dies würde eine zwischengespeicherte Antwort für eine bestimmte Anforderung entfernen. Es gibt auch einen Aufruf, der alle zwischengespeicherten Antworten für alle Anforderungen entfernt, die ausgeführt werden auf UIWebView
:
[[NSURLCache sharedURLCache] removeAllCachedResponses]
Danach können Sie versuchen, alle zugehörigen Cookies zu löschen mit UIWebView
:
for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
if([[cookie domain] isEqualToString:someNSStringUrlDomain]) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
}
Swift 3:
URLCache.shared.removeAllCachedResponses()
if let cookies = HTTPCookieStorage.shared.cookies {
for cookie in cookies {
HTTPCookieStorage.shared.deleteCookie(cookie)
}
}
Deaktivieren Sie das Caching nicht vollständig, da dies die Leistung Ihrer App beeinträchtigt und unnötig ist. Wichtig ist, dass Sie den Cache beim Start der App explizit konfigurieren und bei Bedarf löschen.
So in
application:DidFinishLaunchingWithOptions:
configure die Cache - Grenzen wie folgt:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { int cacheSizeMemory = 4*1024*1024; // 4MB int cacheSizeDisk = 32*1024*1024; // 32MB NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"]; [NSURLCache setSharedURLCache:sharedCache]; // ... other launching code }
Sobald Sie es richtig konfiguriert haben, tun Sie Folgendes, wenn Sie den Cache leeren müssen (z. B. in
applicationDidReceiveMemoryWarning
oder wenn Sie a schließenUIWebView
):[[NSURLCache sharedURLCache] removeAllCachedResponses];
und Sie werden sehen, dass der Speicher wiederhergestellt ist. Ich habe hier über dieses Problem gebloggt: http://twobitlabs.com/2012/01/ios-ipad-iphone-nsurlcache-uiwebview-memory-utilization/
quelle
Sie können das Caching wie folgt deaktivieren:
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; [NSURLCache setSharedURLCache:sharedCache]; [sharedCache release];
BOGEN:
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; [NSURLCache setSharedURLCache:sharedCache];
quelle
Swift 3.
// Remove all cache URLCache.shared.removeAllCachedResponses() // Delete any associated cookies if let cookies = HTTPCookieStorage.shared.cookies { for cookie in cookies { HTTPCookieStorage.shared.deleteCookie(cookie) } }
quelle
Ich gehe davon aus, dass die angezeigte Speichernutzung nicht vom Seiteninhalt abhängt, sondern vom Laden von UIWebView und allen unterstützenden WebKit-Bibliotheken. Ich liebe das UIWebView-Steuerelement, aber es ist ein "schweres" Steuerelement, das einen sehr großen Codeblock abruft.
Dieser Code ist eine große Teilmenge des iOS Safari-Browsers und initialisiert wahrscheinlich eine große Anzahl statischer Strukturen.
quelle
Ich konnte den Code nicht ändern, daher brauchte ich zu Testzwecken eine Befehlszeile und dachte, dies könnte jemandem helfen:
Anwendungsspezifische Caches werden in gespeichert.
~/Library/Caches/<bundle-identifier-of-your-app>
Entfernen Sie sie einfach wie folgt und öffnen Sie Ihre Anwendung erneutrm -rf ~/Library/Caches/com.mycompany.appname/
quelle
Nach verschiedenen Versuchen funktioniert nur dies gut für mich (unter ios 8):
NSURLCache *cache = [[NSURLCache alloc] initWithMemoryCapacity:1 diskCapacity:1 diskPath:nil]; [NSURLCache setSharedURLCache:cache];
quelle
Für schnelle 2.0:
let cacheSizeMemory = 4*1024*1024; // 4MB let cacheSizeDisk = 32*1024*1024; // 32MB let sharedCache = NSURLCache(memoryCapacity: cacheSizeMemory, diskCapacity: cacheSizeDisk, diskPath: "nsurlcache") NSURLCache.setSharedURLCache(sharedCache)
quelle
Ich lade HTML-Seiten aus Dokumenten und wenn sie den gleichen Namen wie eine CSS-Datei
UIWebView
haben, werden anscheinend die vorherigen CSS-Regeln nicht ausgelöst. Vielleicht, weil sie die gleiche URL haben oder so.Ich habe es versucht:
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; [NSURLCache setSharedURLCache:sharedCache]; [sharedCache release];
Ich habe es versucht:
[[NSURLCache sharedURLCache] removeAllCachedResponses];
Ich lade die Startseite mit:
NSURLRequest *appReq = [NSURLRequest requestWithURL:appURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20.0];
Es weigert sich, seine zwischengespeicherten Daten zu werfen! Frustrierend!
Ich mache dies in einer PhoneGap (Cordova) -Anwendung. Ich habe es nicht in isoliertem UIWebView versucht.
Update1: Ich habe festgestellt , diese .
Das Ändern der HTML-Dateien scheint jedoch sehr chaotisch.
quelle