解析iPhone MVC设计模式要点

移动开发 iOS
MVC架构是"模型-视图-控制器",MVC应用程序也是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了View,View会从潜在的Model中获取数据来刷新自己。

接触iphone的编程,就要从安装、架构、模式等一些知识来填充自己的编程习惯,那么本文就是讲述的这些。

一、概念

MVC架构是一个复杂的架构,其实现也显得非常复杂。但是,我们已经总结出了很多可靠的设计模式,多种设计模式结合在一起,使MVC架构的实现变得相对简单易行。Views可以看作一棵树,显然可以用Composite Pattern来实现。Views和Models之间的关系可以用Observer Pattern体现。Controller控制Views的显示,可以用Strategy Pattern实现。Model通常是一个调停者,可采用Mediator Pattern来实现。现在让我们来了解一下MVC三个部分在J2EE架构中处于什么位置,这样有助于我们理解MVC架构的实现。MVC与J2EE架构的对应关系是:View处于Web Tier或者说是Client Tier,通常是JSP/Servlet,即页面显示部分。Controller也处于Web Tier,通常用Servlet来实现,即页面显示的逻辑部分实现。Model处于Middle

二、通信

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,delegate是一组协议,表示程序将要或者已经处于某种状态时,来调整View,以对用户有个交代。例如系统内存不足了,你是不是相应的降低view的质量以节省内存。

:突然冒出个delegate,让人不好理解,其实他不对应xcode为我们创建的XXAppDelegate文件,此文件不属于MVC中的任何一部分,虽然与MVC有联系。我发现苹果文档里说A是B的代理的时候,通常是指A中有B的引用,可以A直接操作B。

三、实作

建立一个BtnClick工程系统,会为我们生成以下文件:

  1. BtnClickAppDelegate.h  
  2. BtnClickAppDelegate.m  

以上两个文件定义了实现UIApplicationDelegate协议的类BtnClicAppDelegate,UIApplicationDelegate协议是系统预定义的协议,负责监视应用程序的高层行为,处理几个关键系统消息,是应用程序生命周期为我们预留的Hook,每个iphone应用程序必不可少的。iphone应用程序的生命周期:

 

  1. BtnClickViewController.h  
  2. BtnClickViewController.m 

实现了MVC中的Controller.可以定义一些IBOutlet元素和IBAction方法与View通信。

  1. @interface BtnClickViewController : UIViewController{  
  2.     IBOutlet UILabel* statusText;  
  3. }  
  4. @property (retain,nonatomic) UILabel *statusText;  
  5. (IBAction)buttonPressed:(id)sender;  
  6. @end 

View对应那个文件呢? 答案是Resource下的MainWindow.xib和BtnClickViewController.xib。MainWindow.xib文件在在应用程序加载时是会被自动加载的,这其实是在plist文件中配置的。然后MainWindow.xib会加载子视图BtnClickViewController.xib。

为什么会命名为ViewController,而不是分开命名?可能是因为View和Controller关系太紧密了,view就是Controller的跟班。实际编程时一定要分清MVC各部分的职责。自始至终没见到Model的面,其实M是可选的,特别是对于简单的应用。任何与界面无关的,我们添加的自定义类来定义我们应用程序的对象,都属于Model的范畴。

【编辑推荐】

浅尝iPhone中的MVC框架设计模式

详解ASP.NET MVC 3中View的变化

iPhone游戏开发:使用到的工具和技术

ASP.NET MVC中很酷的jQuery验证插件

详解ASP.NET MVC 3新的Layout布局系统

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-04-22 09:26:57

MVC设计

2011-04-21 09:46:41

设计模式

2009-07-10 16:14:29

MVC设计模式Swing

2010-09-04 10:57:27

园区网络

2012-05-09 10:09:18

JavaMEJava

2021-09-16 06:44:05

组合模式设计

2014-04-14 05:31:08

WindowsPhonWP8MVC

2009-12-10 13:43:08

使用PHPExcel

2011-07-18 16:51:51

Cocoa 单态 模式

2010-06-12 16:30:51

UML设计

2012-12-18 10:03:22

JavaScriptWebJS

2010-06-17 15:54:24

UML总结

2011-06-02 17:27:49

iphone 多线程

2023-08-29 08:44:38

装饰器组合模式

2013-12-16 10:53:06

移动应用全屏模式

2009-06-11 17:24:46

J2EE的MVC体系结J2EE设计模式

2009-12-24 14:02:57

Linux集群技术

2012-07-06 15:23:28

Linux集群

2010-01-28 13:50:03

Android移植

2009-12-24 09:48:29

WPF分割条
点赞
收藏

51CTO技术栈公众号