Il mio progetto è un lib statico ibrido per mostrare un UIWebView con alcuni JS per controllare la logica. Quando uso 64 bit ed eseguo demo su iOS 8/iPhone 6, la memoria continua a 30M o più!Perdita di memoria con UIWebView
Quando uso nella generazione strumento, l'utilizzo di memoria aumentata è quasi tutto da WebCore; significa che ci sono perdite nel codice JS? Non riesco a trovare una perdita quando utilizzo Safari per eseguire direttamente JS simili.
Quando rilascio UIWebView, la memoria non viene ancora liberata; Ho provato con l'assegnazione dello strumento. Ci sono alcuni webcore e (non oggetti) ancora in memoria, cosa posso fare per rilasciarli?
- 0JavaScriptCore WTF :: MallocHook :: recordAllocation (void *, unsigned long)
- 1 JavaScriptCore WTF :: fastMalloc (più firmato)
- 2 WebCore WebCore :: SharedBuffer :: tampone() const
- 3 WebCore WebCore :: :: SharedBuffer dati() const
- 4 WebCore WebCore :: :: ResourceLoader didReceiveDataOrBuffer (const char *, unsigned int, WTF :: PassRefPtr, lunga lunga, WebCore :: DataPayloadType)
- 5 WebCore WebCore :: SubresourceLoader :: di dReceiveDataOrBuffer (const char *, int, WTF :: PassRefPtr, lunga lunga, WebCore :: DataPayloadType)
- 6 WebCore WebCore :: :: SubresourceLoader didReceiveBuffer (WTF :: PassRefPtr, lunga lunga, WebCore :: DataPayloadType)
- 7 WebCore WebCore :: :: ResourceLoader didReceiveBuffer (WebCore :: ResourceHandle *, WTF :: PassRefPtr, int)
- 8 WebCore WebCore :: :: SynchronousResourceHandleCFURLConnectionDelegate didReceiveDataArray (__ CFArray const *)
I usa il seguente codice
-(void)createUIWebview{
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:serviceUrl]]];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
[[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];
}
-(void)dealloc{
if (_webView.isLoading){
[_webView stopLoading];
}
[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
_webView.delegate=nil;
[_webView removeFromSuperview];
[_webView release];
_webView = nil;
}
ho studiato i seguenti link, ma non sembrano risolvere il mio problema. UIWebview sta ancora perdendo in iOS 8? E il problema non sembra così ovvio quando uso iOS 6 in iPhone4.
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' non eredita da' UIWebView', è una classe completamente nuova e diversa. Se sei su iOS 8, devi assolutamente usarlo su 'UIWebView'. Dovresti anche usare ARC. –
@jshier - Grazie per il trucco ... Ho modificato la risposta da ciò che intendevo dire (che è che condividono molti degli stessi nomi di chiamata del metodo che lo rendono un interruttore molto semplice). –
grazie mille per la soluzione, WKWebView funziona per il mio caso! –