Ios 即使多个子视图控制器的视图不可见,也可以将其与父UIViewController关联吗?

Ios 即使多个子视图控制器的视图不可见,也可以将其与父UIViewController关联吗?,ios,uiviewcontroller,container-view,Ios,Uiviewcontroller,Container View,场景:我有一组对象。我希望在设备处于纵向模式时使用UITableView显示它们,在处于横向模式时使用UICollectionView显示它们。为了实现这一点,我想使用UIViewController作为容器,并为其提供两个子视图控制器(UICollectionViewController和UITableViewController各一个)。我希望方向经常改变,导致父控制器在两个子控制器之间来回交换 在iOS视图控制器编程指南(2012-12-13)中,在第117页和第118页,他们讨论了子视图

场景:我有一组对象。我希望在设备处于纵向模式时使用UITableView显示它们,在处于横向模式时使用UICollectionView显示它们。为了实现这一点,我想使用UIViewController作为容器,并为其提供两个子视图控制器(UICollectionViewController和UITableViewController各一个)。我希望方向经常改变,导致父控制器在两个子控制器之间来回交换

在iOS视图控制器编程指南(2012-12-13)中,在第117页和第118页,他们讨论了子视图之间的转换,每当从视图层次结构中删除子视图时,他们都会从父视图中删除子视图控制器。(具体请参见清单14-3。)


这是出于内存或其他原因所必需的,还是可以让两个子视图控制器都与父视图关联,并在视图之间来回翻转?这两种技术都有性能优势吗?

将两个视图控制器都作为子视图没有问题,您只需确保它们之间共享适当的资源(即不需要显示对象的两个副本),或者在显示和隐藏视图时释放相应的资源


在您的例子中,两个视图控制器显示相同的数据,因此我假设当您在这两个视图之间切换时,您将根据另一个视图中发生的情况更新滚动位置。如果是这种情况,那么将另一个视图控制器作为子视图控制器进行分配并没有多大好处。它将保存的唯一内容是以前在视图中缓存的已分配单元格。因此,为了最大限度地提高内存效率,您应该删除不显示的视图控制器。这在运行时会稍微增加一些成本,但不应引起注意。

将两个视图控制器作为子视图并没有问题,您只需要确保它们之间共享适当的资源(即,没有要显示的对象的两个副本),或者在显示和隐藏视图时释放相应的资源


在您的例子中,两个视图控制器显示相同的数据,因此我假设当您在这两个视图之间切换时,您将根据另一个视图中发生的情况更新滚动位置。如果是这种情况,那么将另一个视图控制器作为子视图控制器进行分配并没有多大好处。它将保存的唯一内容是以前在视图中缓存的已分配单元格。因此,为了最大限度地提高内存效率,您应该删除不显示的视图控制器。这在运行时花费稍多,但不应引起注意。

我不知道您的问题的答案,但我从未见过将控制器作为子控制器添加时存在任何时间延迟,因此我不认为您有任何理由将两个子控制器都与父级关联。我不知道您问题的答案,但我在孩提时代从未见过添加控制器有任何时滞,因此,我不认为您有任何理由将两个子项都与父项关联。您可以始终在容器中实现
didReceiveMemoryWarning
,并在该阶段删除隐藏的视图控制器。您可以始终在容器中实现
didReceiveMemoryWarning
,然后删除隐藏的视图控制器阶段