5

Pytanie dotyczące didReceiveMemoryWarning/viewDidUnload.Czy didReceiveMemoryWarning/viewDidUnload została wywołana podczas wyświetlania kontrolera widoku?

Jeśli moja aplikacja ma wiele kontrolerów widoku, jedna z nich jest wyświetlana, a pozostałe z powrotem (z uwagi na to, że używam kontrolera nawigacyjnego lub kontrolera paska kart, to nie ma znaczenia), które kontrolery widoku będą otrzymywać didReceiveMemoryWarning/viewDidUnload, wszystkie, ukryte lub tylko pokazane?

Czy to możliwe, że pokazano VC otrzymuje didReceiveMemoryWarning, ale nie viewDidUnload (ponieważ jak pokazano, to nie ma sensu).

Nawiasem mówiąc, mam na te pytania po obejrzeniu tego rysunku: UIViewController init/dealloc flow chart

dziękuję za pomoc.

+0

Z diagramu wynika, że ​​viewDidUnload jest wywoływane tylko wtedy, gdy wywołano metodę didReceiveMemoryWarning ??? hmmm to nie prawda – Stas

+0

To jest powód mojego pytania. Czy znasz lepszy schemat? Dzięki. – Ricardo

+1

Wygląda na to, że ma odpowiedź: http://www.nextconceptdc.com/blog/wp-content/uploads/2011/08/UIViewControllerLifecycle.png – Ricardo

Odpowiedz

1

Po pierwsze, istnieją dwie metody didReceiveMemwarnings:

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 

jest wywoływana, gdy aplikacja otrzymuje ostrzeżenie pamięci z systemu. i UIViewController na

- (void)didReceiveMemoryWarning 

Wysłane do kontrolera widoku, gdy aplikacja otrzymuje ostrzeżenie pamięci.

Po drugie, najpierw nazywany jest kodem w tych metodach (no, oczywiście), to w tych kontrolerach, które nie mają super odsyłaczy (czyli tych, które nie są aktualnie wyświetlane) widok jest kasowany, a viewDidUnload jest wysyłany

0

Po otrzymaniu ostrzeżenia o pamięci jest odbierany na poziomie aplikacji, wszystkie jego kontrolki viewController i appdelegate otrzymują.

Nie jest konieczne wywoływanie viewDidUnload dla żadnego lub wszystkich kontrolerów. Jest ściśle zależny od tego, jak krytyczny system operacyjny uważa ostrzeżenie o pamięci. Tak jak po raz pierwszy - Twoja aplikacja otrzymuje ostrzeżenie Level 1, a następnie najprawdopodobniej po raz trzeci (w krótkiej przerwie) system operacyjny wyłączy aplikację, sądząc, że przeszła w stan niestabilny.

Powiązane problemy