/ / Impedisci a UIWebView di allocare molta memoria: iOS, memoria, uiwebview, viewdidload, avviso di memoria

Impedire a UIWebView di allocare molta memoria: ios, memoria, uiwebview, viewdidload, avviso di memoria

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 № 1

Hai 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.