Документация Apple на UIViewController гласит:
Если вы реализуете свой собственный контроллер представления контейнера, он должен вызвать метод willMoveToParentViewController: дочернего контроллера представления перед вызовом метода removeFromParentViewController, передав родительское значение nil.
Когда ваш пользовательский контейнер вызывает метод addChildViewController:, он автоматически вызывает willMoveToParentViewController: метод контроллера представления, который нужно добавить как дочерний элемент перед его добавлением.
Если вы реализуете свой собственный контроллер представления контейнера, он должен вызвать метод didMoveToParentViewController: дочернего контроллера представления после завершения перехода на новый контроллер или, если переход отсутствует, сразу после вызова метода addChildViewController:.
Метод removeFromParentViewController автоматически вызывает метод didMoveToParentViewController: дочернего контроллера представления после того, как он удаляет дочерний элемент.
Почему я должен вызывать эти методы? Что делают эти методы?
ProfileViewController *profile = [[ProfileViewController alloc] init];
profile.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self addChildViewController:profile];
[self.view addSubview:profile.view];
[profile didMoveToParentViewController:self];
Мой код работает отлично, хотя я удаляю последнюю строку. Может кто-нибудь помочь мне в этом?