iOS:关于不复制 MVC 模型中的 View 层次结构

标签 ios objective-c model-view-controller

这个问题与 MVC(在 iOS 编程中)有关,并且与一本书有关,其中作者使用 MVC 与我以前看到的有所不同。

我想我对 Apple 对 MVC 模式的解释非常清楚,正如斯坦福大学关于 iOS 编程的在线类(class)中所解释的那样。也就是说,Model 和 View 应该是独立的,Controller 应该充当两者之间的粘合剂。

我已经实现了一些 View 包含可移动对象的 iOS 应用程序。在这样做时,可移动对象已被实现为 subview (或 CALayer:s),并且它们已被主视图实例化。 subview 知道它自己的位置和大小(在框架属性中),但该信息通常在我的模型对象中重复。事实上,整个 View 层次结构通常在模型中表示(我将大部分意大利面条编码归咎于这种冗余)。

在《开始 iOS 游戏开发》一书中,作者 Patrick Alessi 实现了一个名为阻塞(又名突围)的游戏。在他的实现中,模型分配并初始化 UIView 对象数组(突破游戏中的 block ),然后 Controller 将它们添加到 View 中。当稍后的 block 应该消失时,模型会将其从父 View 以及数组中删除。

我对 Alessi 的实现感觉很复杂。它避免了数据的重复!但是它与 MVC 有什么关系呢?我问这个问题是为了拓宽我自己对 MVC 的理解。是否可以将 UIView 对象同时视为 View 和模型对象?

最佳答案

嗯,它是一个游戏而不是一个信息处理应用程序。该模型实际上与 View 密切相关,因为您关心 block 在屏幕上的位置,以便您可以计算它们是否被击中等等。 3D 射击游戏也是如此,其中大多数信息都涉及在 3D 空间中某个位置的事物。只需确保您设法重构出大多数不直接涉及从 UIView 子类中绘制 View 的代码。

得分、玩家数据和广告之类的东西应该使用传统的 MVC 模型。

关于iOS:关于不复制 MVC 模型中的 View 层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24368557/

相关文章:

ios - 是否可以在输出 ".a"库的项目中包含框架?

objective-c - ios)对象-c。如何自定义导航栏上的按钮

php - MVC 框架(在本例中为 PHP)

model-view-controller - 如何在 ExtJS MVC 中通过引用获取存储?

ios - 在 Swift 中将完成处理程序分配给闭包变量

ios - 将 Facebook SDK 与 Xcode Swift 项目集成 - AppDelegate 错误?

android - 带标签/标签的照片的云存储架构/解决方案

iOS 4 应用程序图标不显示

objective-c - 在 NSTableView 中使用箭头键模拟 Tab 和 Shift-Tab

c++ - Qt设计和性能问题