我有 1 个父控制器和 1 个视图控制器。我已经成功地执行了addChildViewController
和transitionFromViewController
函数来利用 iPhone SDK 提供的 Containment API。然而,在我真正将视图控制器传递给这些函数之前,我有几个问题
问题 1:在 ParentVCViewDidLoad
方法中,我必须使用以下方法实例化所有 4 个子视图控制器
UIViewController* child = [self.storyboard instantiateViewControllerWithIdentifier:identifier];
或者 self.myViewController = [[MyViewController alloc] init];
问题 2:假设我最初没有在我的ViewDidLoad
...中实例化所有 4 个子视图,每次我在使用addChildViewController
执行转换之前添加一个新的子视图transitionFromViewController
时,我是否需要实例化我想要添加的子 VC?
问题 3 :在问题 1 和/或问题 2 的答案为“是”的情况下,关于内存管理必须做些什么。对于问题 1,当从子 VC 导航回父 VC 时,似乎意味着将创建 4 个子视图控制器的新对象,对吗?在查看问题 2 时,当进行转换时,通常情况下,似乎每次都会创建子视图控制器对象的新副本。从本质上讲,在父子视图之间以及子视图和子视图之间的一些转换之后,这个应用程序可能会变得非常臃肿。
问题4:什么时候transitionFromViewController
被调用,内存中发生了什么?在父子转换中父 VC 会发生什么?在子-子转换中子 VC 会发生什么?
更新:此特定教程中的以下引用似乎涉及我的一些担忧(强调添加):
请注意,这
self.storyboard
不是通过init
电话设置的。目前,还没有放置此初始化代码的好地方。一种选择是覆盖setStoryboard:
,另一种是viewDidLoad
. 这两个选项的问题是您应该保护addChildViewController:
调用以确保视图控制器不会被实例化两次。