【发布时间】:2015-11-13 20:32:01
【问题描述】:
UIViewController 上的 Apple 文档说:
如果你实现自己的容器视图控制器,它必须在调用removeFromParentViewController方法之前调用子视图控制器的willMoveToParentViewController:方法,传入一个父值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];
即使我删除了最后一行,我的代码也能完美运行。有人可以帮我吗?
提前致谢
【问题讨论】:
-
这些方法只用于某些情况。在您将视图控制器移动到视图控制器/从视图控制器中移除视图控制器之后/之前。如果只是添加/推送/删除/弹出,你不必调用它。
-
删除这些方法不会显示任何变化。添加它们也是如此
-
是的。这是正确的。这种方法没有任何作用。只是 didMoveToParentViewController 方法的调用。如果你不实现它,调用它 -> 不做任何事情。
-
它会对内存管理做些什么吗?
-
不是。你可以忽略它。
标签: ios objective-c iphone uiviewcontroller