6

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

+0

Ł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. –

+0

implement - (void) didReceiveMemoryWarning. Jest to metoda, która jest wywoływana, gdy Twoja aplikacja zużywa zbyt dużo pamięci. – MJB

+0

W jaki sposób implementujesz zachowanie przycisku wstecz? Czy możesz napisać kod do tego? – Jim

Odpowiedz

1

ARC jest tylko stosowany w celu zmniejszenia kod i zarządzać pamięci wewnętrznej. Aby uzyskać więcej informacji, zapoznaj się z samouczkiem poniżej, aby łatwiej zrozumieć pojęcia.

Understanding Automatic Reference Counting in Objective-C

Mam nadzieję, że to może pomóc.

+0

Faktycznie to zwiększa moją wiedzę o ARC, dziękuję, +1 za to! Ale to nie rozwiązuje mojego problemu, po prostu muszę jakoś powiedzieć iOS, że instancja tego kontrolera pomocniczego, za każdym razem, gdy użytkownik naciśnie przycisk Wstecz, wyskakując go ze stosu nawigacyjnego, nie będzie już używany. – sonxurxo

Powiązane problemy