Ios didMoveToParentViewController和willMoveToParentViewController

Ios didMoveToParentViewController和willMoveToParentViewController,ios,objective-c,iphone,uiviewcontroller,Ios,Objective C,Iphone,Uiviewcontroller,苹果在UIViewController上的文档说明: 如果要实现自己的容器视图控制器,则在调用removeFromParentViewController方法之前,它必须调用子视图控制器的willMoveToParentViewController:方法,并传入父值nil 当您的自定义容器调用addChildViewController:方法时,它会自动调用视图控制器的willMoveToParentViewController:方法,以便在添加之前将其作为子级添加 如果您正在实现自己的容器视图

苹果在
UIViewController
上的文档说明:

如果要实现自己的容器视图控制器,则在调用
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];
即使我删除了最后一行代码,我的代码仍然可以正常工作。有人能帮我吗


提前感谢

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


addChildViewController:
自动调用
[childwillmovetoparentviewcontroller:self]
。因此,应该在
addChildViewController:
之后调用
didMoveToParentViewController
。类似地,
removefromparentview控制器:
自动调用
[child-didMoveToParentViewController:nil]
。因此,在
从父视图控制器中移除之前,应该调用
willMoveToParentViewController:
,基本上,它们不会做任何你能在界面中注意到的事情。“但是,任何子类都允许重写它们,因此如果不调用它们,就不会断开一个裸露的UIViewController,而是会断开依赖它的子类(例如:假设子类希望在从父视图控制器中删除对象时释放该对象,如果不调用该方法,则永远不会释放该对象)。”正如评论中所解释的那样。

这些方法仅适用于某些情况。在将viewcontroller移动到viewcontroller中/从viewcontroller中移除viewcontroller之前/之后。如果juts add/push/remove/pop,则不必调用它。删除这些方法不会显示任何更改。将它们添加到“是”的情况也是如此。没错。这种方法没有任何作用。只需调用didMoveToParentViewController方法。如果您不实现它,请调用它->什么都不做。它对内存管理有帮助吗?没有。你可以忽略它。