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