场景:我有一组对象。我希望在设备处于纵向模式时使用UITableView显示它们,而在横向模式下使用UICollectionView。为了实现这一点,我想使用UIViewController作为容器,并给它两个子视图控制器(UICollectionViewController和UITableViewController各一个)。我希望方向经常改变,导致父级在两个子控制器之间来回交换。
在适用于iOS的View Controller编程指南(2012-12-13)中,在第117页和第118页中,他们讨论了子节点之间的转换,只要从子节点移除子视图,它们就会从父节点中删除子视图控制器。视图层次结构。 (特别参见清单14-3。)
这对于内存或其他原因是必要的,还是可以保持两个子视图控制器与父关联,并且只是在视图之间来回切换?两种技术都有性能优势吗?
答案 0 :(得分:3)
将两个视图控制器都作为子节点没有问题,您只需要确保它们之间共享适当的资源(即没有要显示的对象的2个副本)或者在显示视图时释放它们隐藏。
在您的情况下,两个视图控制器显示相同的数据,因此我假设当您在两者之间切换时,您将根据另一个视图中发生的情况更新滚动位置。如果是这种情况,那么保持其他视图控制器的分配和作为子节点并没有太大的好处。它唯一能保存的是先前在视图中缓存的已分配单元格。因此,为了获得最大的内存效率,您应该删除未显示的视图控制器。这在运行时会花费更多,但不应该引人注意。