Car*_*ape 8 oop model-view-controller objective-c ios
我记得以来一直在制作iOS应用程序,但直到最近我实习编程时,我的编程风格还没有成熟.我很早就学到了很多OO概念,因为我意识到生活对它们的理解很糟糕,但我从未学过的一件事就是MVC模式.
为了给出背景,让我们说我在一个SolarSystemView(子类UIView)中绘制太阳系.我应该SolarSystemView有一个类的实例变量SolarSystem(一个包含具有所有重要行星和stelar属性的数据结构的类),还是应该拥有一个实例SolarSystemViewController?或者它是完全不同的东西?我找不到任何能给出满意答案的示例代码.
我想如果视图拥有模型,操作将非常流畅,但这也不是一种好的风格.毕竟,SolarSystem实例必须以某种方式动态更改,并且具有与SolarSystemView更新相同或相似的速率.
在MVC范例中,模型应该与View分开.为了获得它需要绘制的数据,它向Controller询问它,然后它会向模型询问它.这样,我们就可以从GUI中分离信息.将其视为模型控制器视图是否有帮助.因此,在大多数情况下,Controller"拥有"模型.
例如,在cs193p中,CalculatorViewController(Controller)具有CalculatorBrain(Model)属性,它与之交互以获取要在View中显示的等式的结果.
在你的特定例子中,它SolarSystemViewController可能有一个强引用SolarSystem,它将轮询它将传递的数据,SolarSystemView以便它可以在需要更新时绘制自己.该SolarSystemView还可以通知SolarSystemViewController当用户与它进行交互,以便它可以显示其他视图或更新SolarSystem,其中它可以执行任何其他任务.
请注意,Cocoa和Cocoa Touch中的MVC范例与其他更常见的MVC版本(如Smalltalk)略有不同.例如,如果您查看MVC上的Wikipedia页面,那么图表应该与您学习的内容有所不同.实际上,GoF(设计模式)因此描述了MVC.
MVC由三种对象组成.Model是应用程序对象,View是其屏幕显示,Controller定义用户界面对用户输入的反应方式.在MVC之前,用户界面设计倾向于将这些对象混为一谈.MVC将它们分离以增加灵活性和重用.MVC通过在它们之间建立订阅/通知协议来分离视图和模型.视图必须确保其外观反映模型的状态.每当模型的数据发生变化时,模型都会通知依赖于它的视图.作为回应,每个视图都有机会更新自己.此方法允许您将多个视图附加到模型以提供不同的演示文稿.您还可以为模型创建新视图而无需重写.
在这两种情况下,模型本身都与View联系以更新它.但是,在iOS上,Model和View之间的交互是通过Controller处理的.这在cs193p的第一个会话以及Apple自己的MVC关系文档中得到了很好的解释.这样,您只需重写Controller代码即可在其他地方重用模型和视图.
这是来自cs193p的MVC图表来澄清.

| 归档时间: |
|
| 查看次数: |
884 次 |
| 最近记录: |