didMoveToParentViewController和willMoveToParentViewController

Aru*_*run 18 iphone objective-c uiviewcontroller ios

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];
Run Code Online (Sandbox Code Playgroud)

即使我删除了最后一行,我的代码也能正常运行.有人可以帮我吗?

提前致谢

Aru*_*run 22

使用这些方法是因为在添加或删除子视图控制器时应遵循该规则.在添加子视图之前,willMoveToParentViewController应先调用控制器方法,然后再调用didMoveToParentViewController方法.从父视图控制器中删除子视图控制器时,将以相反的顺序调用这些方法.

addChildViewController:自动呼叫[child willMoveToParentViewController:self].所以要调用didMoveToParentViewController之后addChildViewController:.同样removeFromParentViewController:自动调用[child didMoveToParentViewController:nil].所以要调用willMoveToParentViewController:之前removeFromParentViewController: