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

开发 后端
MVC模式大家并不陌生,用的比较多的是ASP.NET MVC模式。今天我们要简单谈一下iPhone下的MVC设计模式。

整理自斯坦福大学iphone开发公开课,并加入了一些自己的理解。

一、概念 

Model = 你的应用程序是什么,是用户界面无关的部分

Controller = 你的应用程序如何将Model显示给用户(UI逻辑),是中心是桥梁,连通Model和View

View = Controller的奴才(minion)、小跟班。view一切听从Controller的指挥,并及时将重要事件报告给Controller

二、通信

 

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工程系统,会为我们生成以下文件:

BtnClickAppDelegate.h

BtnClickAppDelegate.m

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

BtnClickViewController.h
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的范畴。

至于为什么这么麻烦地分成三块,而不是两块,或者干脆一砣?只能在我们编程过程中慢慢体会了。

原文链接:http://www.cnblogs.com/hjblog/archive/2011/04/21/2023597.html

责任编辑:彭凡 来源: 博客园
相关推荐

2011-06-02 18:02:50

iPhone MVC

2012-01-18 10:20:42

框架设计

2023-10-26 09:02:30

框架设计模式

2012-06-25 12:43:26

.NET框架

2020-07-30 10:35:32

Java反射框架设计

2023-07-03 07:39:43

Spring框架设计模式

2012-06-25 09:28:42

.NET可逆框架

2017-11-23 17:21:31

Yii框架IntelYii框架深度剖析

2010-01-08 12:03:42

ibmdwREST

2016-03-23 11:05:58

Socket开发框架分析

2009-05-04 13:25:41

PHPMVCcodeigniter

2009-09-08 09:12:12

LINQ构建框架设计

2022-09-15 18:32:13

SPI模型框架

2021-02-23 08:18:04

Java 反射机制

2022-06-15 11:01:59

自定义SPIJava

2017-02-13 13:10:35

JavaScript设计模式

2022-07-01 07:49:04

云存储服务模式数据结构

2012-01-10 10:04:43

Node.js

2010-09-25 13:09:39

UISymbian

2011-11-23 14:03:54

JavaSSHMVC
点赞
收藏

51CTO技术栈公众号