什么时候使用ContainerViewController?与iOS中的普通视图相比,它在内存管理方面有什么优势吗?在我的应用程序中,其中一个屏幕有两个独立的选项,分别负责不同的任务。我是否应该使用两个ContainerView而不是两个单独的视图。哪个选项更具可扩展性?
发布于 2018-05-18 18:32:19
容器视图和父/子视图控制器不会对内存产生有意义的影响。在不同的视图结构对内存使用产生有意义的影响之前,您需要在内存中同时拥有数百个视图控制器。
容器视图和父/子视图控制器作为设计模式很有用。它使得创建用户界面的离散“瓦片”变得简单,其中视图和控制它们的控制逻辑是一个插件单元。使用父/子视图控制器也是使UITableViewControllers和UICollectionViewControllers有用的唯一方法,因为这些视图控制器不允许在其视图层次结构中有任何其他子视图。
发布于 2018-05-18 18:44:02
从性能或内存管理的角度来看,直接使用UIView总是相同或更好的。从可伸缩性来看,它仅仅取决于您正在构建的内容。
故事板的内容视图只是为了方便起见。通常,通过调用适当的方法并将视图作为子视图添加,可以将任何视图控制器作为子视图添加到另一个视图控制器。您在这里得到的是,视图控制器将接收特定于它的事件,而视图本身不会。
一般来说,视图控制器只是UIView的一个包装器。应用程序是这样设计的,所以您需要一个根应用程序,但在此之后,您不妨只使用视图来做所有事情。
容器在内部使用得很多。在现实中,视图控制器可能只有present和dismiss。你所看到的push,pop,set视图控制器都在使用容器。导航控制器由头部视图和容器视图组成。选项卡栏视图控制器有选项卡栏视图和容器视图...使用容器,您可以轻松地创建自己的类似组件。
当您使用容器时,您将拥有一个非常干净的代码,因为您将每个单元的逻辑分离到其视图控制器。但与此同时,您的代码可能会变得复杂,因为您现在无法在视图控制器之间进行通信。假设您有两个屏幕部分,每个部分代表一个通用模型的一组对象。现在,当两者之间没有关联时,一切都很顺利;但是,当第一个视图控制器更改一个选项时,现在需要反映在第二个视图控制器中,您可能需要报告给delegate,这是一个父视图控制器,它现在将报告给另一个子视图控制器。甚至父母也可能有丑陋的代码来访问它的孩子。但另一方面,一些MVVM过程可以很好地处理这种情况。
无论如何,没有明显的优点或缺点。这取决于您将使用什么架构以及如何使用它。这两个过程都是可以解决的,而且都可能变得丑陋。
https://stackoverflow.com/questions/50409166
复制相似问题