IOS-MVC设计模式初探

来源:互联网 发布:ubuntu samba 编辑:程序博客网 时间:2024/06/17 05:40

1.MVC模式:模型-视图-控制器,

模型:保存应用程序数据的类

视图:包括窗口、空间以及其他一些用户可以看到并能与之进行交互的元素。

控制器:把模型和视图绑定在一汽的代码,包括处理用户输入的应用程序逻辑。

(1)主要目的是为了最大限度地分离这3类代码:

创建的任何对象都应该十分清晰明确,让人一看就知道其属于MVC的哪个部分,尽量不要包含那些可能被认为属于多个分类的功能。例如:实现按钮的对象不应该包含按钮点击时处理数据的代码。

(2)MVC同时可以确保代码的最大可重用性:

一个实现通用按钮的类可以再任何应用程序中使用,否则,如果在实现按钮的类的时候同时进行了一些特定的计算,那这个类就只能在最初实现它的应用程序中使用。


2.在编写Cocoa Touch程序时,用户界面可以创建大部分可视化窗口,但是有时候仍然需要在代码中进行修改(甚至)创建用户界面。


3.保存用户数据的模型:可以使自己编写的一个Object-C类;也可以使用Core Data构建一个数据模型。


4.控制器通常由应用程序的具体类组成。控制器可以使完全自定义的类(NSObject子类),但大多数情况下控制器是UIKit框架提供的那些通用控制器类(比如UIViewController)的子类。通过继承,可以使一个类获取大量的实用功能,而不必花时间进行重复造“轮子”。


5.对于IOS应用,基本可以说是忠实于MVC的。


6.创建一个项目:

(1)创建一个IOS程序之后,会自动生成4个源代码(.h/.m结尾):其中两个为应用程序委托(application delegate),另一个是这个应用仅有的一个视图的视图控制器(继承了UIViewController,是通用控制器中的一个)。

(2)控制器类与分镜文件中的对象交互:输出接口与操作方法。

输出接口:由IBOutlet关键字声明。可以把输出接口看做指向用户界面中对象的指针。可以关联输出接口与用户界面对象,就可以在代码中使用这个输出接口来修改标签显示文本了。

操作方法:是一种返回类型为IBAction的特殊方法。可以对视图界面对象进行设置,以触发控制器类中的某些特殊方法。其参数可以为(id) sender,指向出发该方法的按钮。

(3).m文件(使用基本的输出接口与操作方法)

@implementation ViewController- (IBAction)buttonPressed:(UIButton *)sender {    NSString *title = [sender titleForState:UIControlStateNormal];    NSString *plainText = [NSString stringWithFormat:@"%@ button pressed.",title];    _statusLabel.text = plainText;    //这里不用在实现部分再声明statusLabel变量,使用 _变量名 的方式可以直接访问。}@end





下面摘录一段总结:摘自:http://liuzhichao.com/p/1379.html

1.Model和View永远不能相互通信,只能通过Controller传递。

2.Controller可以直接与Model对话(读写调用Model),Model通过Notification和KVO机制和Controller间接通信。

3.Controller可以直接与View对话,通过outlet,直接操作View,outlet直接对应到View中的控件,View通过action向Controller报告事件的发生(如用户Touch我了)。Controller是View得直接数据源(数据很可能是Controller从Model中取得并经过加工的)。Controller是View的代理(delegate),以同步View与Controller。



另一篇博文:http://www.cnblogs.com/pengyingh/articles/2495376.html

C对M:API
C对V:Outlet
V对C:Target-action, Delegate,Datasource
M对C:Notification,KVO

MVC把软件系统分为三个部分:Model,View,Controller。在cocoa中,你的程序中的每一个object(对象)都将明显地仅属于这三部分中的一个,而完全不属于另外两个。

Model = 你的程序是什么(而不是你的程序是如何显示的)

让我们举个例子,我们上中学的时候,我们的步步高电子词典中有个游戏叫“雷霆战机”,也就是“打飞机”的游戏,Model就是:你的小飞机的攻击力是多少?你的小飞机上装的是什么武器,炮弹,导弹,还是激光炮?你的小飞机还有多少血?等等。再概括点说,就是你的程序将要实现的功能,或者是它所能干的事情。

Controller = 如何使你的模型呈现给用户(程序逻辑)

Controller是程序内部的逻辑,大多情况下你将看不到它,它将Model和View捆绑在一起,它将处理用户的输入,例如,你按开炮的键子,Controller就会通过内部的逻辑来处理你的要求,并在屏幕上做出相应的显示,你将看到屏幕上的小飞机发出炮弹击中敌机。这也是Controller控制View的显示的例子。所以你可以把Controller看成是连接M和V的桥梁。

View = 在屏幕上你所看到的(是你的Controller的“奴才”)

接着前面的小飞机,View就是:你的小飞机是什么样子的,有一个还是两个翅膀,有几挺枪炮;还有,你的飞机在屏幕上的位置等等。总之,你在屏幕上看到的组件都可以归类为View。

MVC可以帮助确保帮助实现程序最大程度的可重用性。各MVC元素彼此独立运作,通过分开这些元素,可以构建可维护,可独立更新的程序组建。


另外一篇关于MVC模式讲解的博文:http://www.cnblogs.com/limlee/archive/2012/06/13/2547537.html

这篇博文真的很赞。


0 0