Wiem, że począwszy od iOS5 i nowych metod zapobiegania UIViewController, należy wywoływać te metody wraz z addChildViewController:, removeFromParentViewController: i metody przejścia. Znam również właściwą kolejność wywoływania ich w trzech scenariuszach. Czego nie wiem, co dokładnie robią te metody?Co dokładnie willMoveToParentViewController: i didMoveToParentViewController: zrobić?
Jeśli były to tylko punkty zastępcze dla podklas UIViewController, to chyba nadpisujemy super podczas przesłonięcia. Co może/pójdzie źle, jeśli nie zadzwonię pod numer willMoveToParentViewController: nil przed usunięciem kontrolera widoku lub didMoveToParentViewController: self?
Tak, wiem, "dodaj" i "usuń" wywołuje jedną metodę automatycznie (odpowiednio willMove ... i didMove ...) i wymaga ręcznego połączenia z drugą. Myślę, że nie mam problemu ze zrozumieniem, co robią "dodaj" i "usuń" - wygląda na to, że jest to dość niewygodne. Po prostu czuję się nieco zdezorientowany, co właściwie robią "wola" i "czy". – konrad
"Wola" i "zrobił" nie mają szczególnej implementacji, wywołujesz je na kontrolerze dziecięcym, a jeśli nie, to po prostu nie są nazywane ... co może stanowić problem, jeśli dziecko kontroler je wdrożył i polegał na nich. W mojej odpowiedzi omyłkowo nazywam je "metodami delegowanymi", ale to prawie to, czym one są, funkcjonują jako opcjonalne metody delegatów, a dziecko może je wykorzystać do przeprowadzenia pewnych ustawień lub czyszczenia. Każda podklasa UIViewController może je zastąpić, a jeśli zaimplementujesz kontroler kontenera, powinieneś uszanować to zachowanie i wywołać je. – Guillaume
Aby było jasne, UIViewController 'willMoveToParentViewController:' i 'didMoveToParentViewController:' nic nie rób. Jednak każda podklasa pozwala na ich przesłonięcie, więc jeśli nie będziesz ich wywoływał, nie złamiesz nagiego UIViewController, ale złamiesz podklasy, które na nim polegają (na przykład: powiedz, że podklasa chce zwolnić obiekt, gdy zostanie usunięty z nadrzędnego kontrolera widoku, jeśli nie wywołasz tej metody, to nigdy nie zwolni obiektu). – Guillaume