如何选择在 View 和 ViewController 中放置哪些代码?

Posted

技术标签:

【中文标题】如何选择在 View 和 ViewController 中放置哪些代码?【英文标题】:How to choose what code to put in a View vs. a ViewController? 【发布时间】:2010-11-06 10:58:39 【问题描述】:

在 Xcode 中,实用程序应用程序模板使用以下内容创建项目:

主视图、主视图控制器

FlipsideView、FlipsideViewController

在我的应用程序中,这两个视图对应于主 UI 和一个首选项屏幕。显然,我希望首选项反映在主 UI 中并保存到磁盘以记住设置。我知道该怎么做。

问题是,在查看类似应用程序的示例代码时,我发现有些人将大部分活动代码放在一个视图中,而视图控制器只是一个存根,而另一些则相反。

在决定将我的大部分功能放在哪里时,是否有经验法则?

【问题讨论】:

【参考方案1】:

一种决定方法:如果您的应用收到内存不足警告,则默认行为是任何当前不可见的视图都可能被销毁。这意味着,如果您有任何无法轻松重新创建的状态信息,则最好不要将其保留在您的视图中。

所以这取决于你的大部分功能在做什么:如果它维护用户创建的信息,它需要在视图控制器中。

【讨论】:

【参考方案2】:

如果你想成为一个 MVC 纯粹主义者,视图切换和事件处理之类的东西应该放在控制器中,视图构建代码应该放在视图中。

但如果您在整个应用程序中保持一致,则可以将一些应用程序逻辑放入视图中。

【讨论】:

我同意通常只有视图构建代码属于视图类。而且通常不需要视图构建代码,因此您可以完全摆脱视图类。【参考方案3】:

*** 上已经有几个问题涉及模型-视图-控制器。例如,请参阅What goes into the "Controller" in "MVC"?。

在您的特定场景中,偏好本身是一种跟踪用户偏好的模型。保存和加载这些偏好是控制器的职责。显示这些偏好并为用户提供更改它们的方法是视图的职责。最后,当用户更改这些偏好时,视图会将其报告给控制器,控制器会对模型进行适当的更改。

【讨论】:

以上是关于如何选择在 View 和 ViewController 中放置哪些代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何选择在 View 和 ViewController 中放置哪些代码?

基于视图的应用程序 - [window addSubview:viewController.view] 之后的 viewcontroller retainCount;

当 touchUpInside Back 按钮带有 [self.view removeFromSuperview] 时,上一个视图无响应

swift 中,viewcontroll如果跳转到tabBar页面,我是有一个返回首页的按钮,首页就是登录页面之的页面

如何交互式收缩和增长 Table View Cell?

如何从 view.window 中删除多个选择器