Ho un problema con UIWebView. Sto usando questo componente per caricare normali pagine Web su iPad / iPhone. UIWebView è presentato in modalViewController. Alcune pagine sono molto affamate di memoria e alcune hanno anche contenuti Flash.
Il problema è che a volte su alcune pagine ricevo un avviso di memoria
Received memory warning. Level=1
Quando ciò accade e quando chiudo questo modalViewController (che ha una pagina caricata in webView), la vista precedente si ricarica automaticamente - il metodo viewDidLoad viene nuovamente attivato.
Ho il sospetto che alcune pagine di UIWebView consumino molta memoria e che l'applicazione rilasci memoria delle sue visualizzazioni, ma non si blocchi.
Esiste un modo per limitare il consumo di memoria di webView o esiste un altro modo per evitare questo avviso di memoria?
Grazie!
risposte:
3 per risposta № 1Hai pochissimo controllo dell'utilizzo della memoria di UIWebView
oggetti. Hai anche un controllo molto limitato dell'utilizzo complessivo della memoria di sistema. Quindi non c'è modo di evitare gli avvisi di memoria. iOS si aspetta che le tue app si comportino correttamente quando ricevono avvisi di memoria, quindi il tuo viewDidLoad
il metodo deve essere scritto per gestire la riesecuzione dopo un avviso di memoria.
Le uniche cose che puoi fare per limitare l'utilizzo della memoria di a UIWebView
è vederlo visualizzare semplici pagine Web. Sembra che dalla tua domanda non sia un'opzione.
Modificare: viewDidUnload
viene chiamato in condizioni di memoria insufficiente. Questo metodo dovrebbe liberare tutto ciò che è facile da ricreare nel metodo viewDidLoad. Non rilasciare le informazioni sullo stato che si desidera mostrare all'utente quando questa vista viene restituita allo schermo. Quindi nel tuo viewDidLoad
metodo controlla tutti gli oggetti che crei. Se sono nil
, devono essere inizializzati, altrimenti non è la prima volta viewDidLoad
è stato chiamato il metodo e non è necessario inizializzare gli oggetti.
In altre parole: viewDidUnload
gestisce situazioni di memoria insufficiente e viewDidLoad
non dovrebbe supporre che venga eseguito una volta.