Jestem na projekcie iPhone'a przy użyciu ARC
. Aplikacja jest oparta na nawigacji, przy użyciu UINavigationController
.Po ustawieniu obiektów na zero podczas używania ARC?
Typowym przykładem użycia jest przejście z "głównego" UIViewController
do "drugorzędnego" UIViewController
wiele razy, może nawet do 100 razy. Dodatkowy kontroler ma wiele statycznych, lokalnych obrazów PNG, niektóre z nich powtarzają się.
Profiluję aplikację i widzę, jak przy przejściu z "głównego" do "dodatkowego" alokuje około 0,8 MB, ale po naciśnięciu przycisku wstecz nie zwalnia pamięci. Kiedy ponownie przejdę do drugiego kontrolera, inne 0,8 MB są przydzielone, i tak dalej ...
Debugowanie, zauważyłem, że viewDidUnload:
metoda wtórnego UIViewController
nigdy nie jest wywoływana, ale czytałem też, że to jest to metoda, w której powinienem ustawić zero referencji przechowywanych przez kontroler. Zrobić tak w viewDidDisappear:
nie pomaga, ponieważ chcę, aby wystąpiło tylko wtedy, gdy naciska się przycisk Wstecz, to jest, kiedy popping kontroler ze stosu (metoda viewDidDisappear:
byłaby również wywoływana podczas przesuwania innego kontrolera na stosie).
Są więc pytania: czy muszę to zrobić? Czy mogę wymusić wywołanie tej metody? Czy to zachowanie jest OK (profilowanie, alokacje wzrosły do 20 MB po kilku cyklach "main" -> "secondary" -> "main" -> "secondary" -> ...)?
Dziękuję wszystkim z góry
Łuk służy w zasadzie do automatycznego zwolnienia obiektu. Możesz utworzyć nowy prohject z wyłączeniem ARC, aby można było ręcznie zwolnić obiekty. –
implement - (void) didReceiveMemoryWarning. Jest to metoda, która jest wywoływana, gdy Twoja aplikacja zużywa zbyt dużo pamięci. – MJB
W jaki sposób implementujesz zachowanie przycisku wstecz? Czy możesz napisać kod do tego? – Jim