为什么我应该避免只为整个应用程序使用一个UIViewController

时间:2016-02-24 18:59:48

标签: ios iphone memory-management uiviewcontroller

我几年来一直在构建iOS应用程序。虽然我通常使用导航控制器来管理我的视图控制器,但是我只是使用一个UIViewController管理其所有视图,从而构建iOS应用程序的影响。这样,开发人员可以通过为唯一的UIViewController分配新视图来在它的视图之间导航。

让我们说开发人员不打算使用Storyboard,并且他并不介意以编程方式构建视图。

以这种方式构建应用程序是否有优势?有什么缺点?

让我们说清楚,我不打算以这种方式构建应用程序。我只是在徘徊在理论方面的影响。

2 个答案:

答案 0 :(得分:1)

Apple在其https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIPageViewControllerClassReferenceClassRef/index.html中选择了每页一个视图控制器方法。这可能部分是为了最大化通用性 - UIPageViewController的不同用户显然会有不同的需求。但另一个考虑因素是记忆;如果您在多个子视图方法中有几十个页面,那么您将拥有几十个整页子视图,并且这是一种快速的方式,可以使用比您在任何给定时间实际需要的内存更多的内存。 / p>

如果您使用单个视图控制器和多个子视图,请考虑仅在您需要时实例化子视图,并从视图层次结构中删除您不需要的视图。实际上,由于听起来您的所有页面都使用相同的格式(清单),因此很难理解为什么您需要的页面只有一个以上的视图。当用户选择不同的页面时,您只需为视图提供一组新的数据即可。

答案 1 :(得分:1)

  

以这种方式构建应用程序是否有优势?有什么缺点?

在单个视图控制器中灵活地进行视图绝对没有错。我一直这样做,你可能也是这样。

但现在让我们考虑一个极端情况以及放置功能的问题。假设我有10个不同的视图,其中包含10组不同的子视图功能(按钮可以执行操作,依此类推),所有这些视图都在界面中相互替换。很容易想象,一个控制所有这些的视图控制器可能会在代码中占据上风。另一方面,如果每个视图都有自己的视图控制器,则每个视图的控制器功能都位于单独的视图控制器中。从长远来看,这可能会使代码更易于维护。

导航控制器架构就是一个很好的例子。它分隔执行视图之间转换的代码(导航控制器,它将视图输入和输出,并处理后退按钮等等)来自实现这些视图功能的代码(推送的子视图控制器和弹出导航控制器的堆栈)。这是相当干净和优雅的,你可能想要使用或模仿,而不是放弃。