/ / Zapobieganie przydziałowi UIWebView do dużej ilości pamięci - iOS, pamięć, uiwebview, viewdidload, ostrzeżenie o pamięci

Zapobiegaj przydziałowi UIWebView dużej ilości pamięci - ios, memory, uiwebview, viewdidload, ostrzeżenie o pamięci

Mam problem z UIWebView. Używam tego komponentu do ładowania normalnych stron internetowych na iPadzie / iPhonie. UIWebView jest prezentowany w modalViewController. Niektóre strony są bardzo głodne pamięci, a niektóre mają również zawartość Flash.

Problem polega na tym, że czasami na niektórych stronach pojawia się ostrzeżenie o pamięci

Received memory warning. Level=1

Kiedy tak się dzieje i kiedy zamykam ten modalViewController (który ma stronę załadowaną do webView), wówczas poprzedni widok ładuje się automatycznie - metoda viewDidLoad zostaje ponownie uruchomiona.

Podejrzewam, że niektóre strony w UIWebView zużywają dużo pamięci i pamięci aplikacji zwalniają jej widoki, ale nie ulega awarii.

Czy istnieje sposób na ograniczenie zużycia pamięci przez webView lub czy istnieje inny sposób uniknięcia tego ostrzeżenia o pamięci?

Dzięki!

Odpowiedzi:

3 dla odpowiedzi № 1

Masz bardzo małą kontrolę nad wykorzystaniem pamięci UIWebView przedmioty Masz również bardzo niewielką kontrolę nad ogólnym wykorzystaniem pamięci systemowej. Dlatego nie ma sposobu na uniknięcie ostrzeżeń pamięci. iOS oczekuje, że Twoje aplikacje będą działały poprawnie po otrzymaniu ostrzeżeń o pamięci, więc Twój viewDidLoad należy napisać metodę obsługi ponownego uruchamiania po ostrzeżeniu pamięci.

Jedyne, co możesz zrobić, aby ograniczyć użycie pamięci UIWebView polega na wyświetlaniu prostych stron internetowych. Wygląda na to, że z twojego pytania to nie jest opcja.

Edytować: viewDidUnload jest wywoływany w warunkach niskiej pamięci. Oczekuje się, że ta metoda zwolni wszystko, co jest łatwe do odtworzenia w metodzie viewDidLoad. Nie zwalniaj informacji o stanie, które chcesz pokazać użytkownikowi, gdy widok ten powróci na ekran. Potem w twoim viewDidLoad Metoda sprawdza wszystkie obiekty, które tworzysz. Jeśli są nil, muszą zostać zainicjalizowane, w przeciwnym razie nie będzie to pierwszy raz viewDidLoad została wywołana metoda i nie powinieneś ponownie inicjalizować obiektów.

Innymi słowy: viewDidUnload obsługuje sytuacje o małej ilości pamięci i viewDidLoad nie powinien zakładać, że został uruchomiony raz.