Cocoa的MVC架构分析

转载 2012年03月26日 14:09:15

from:http://www.cocoachina.com/bbs/read.php?tid=38766&page=3

Cocoa的MVC架构分析

在Cocoa框架中:
所有的控件、窗口等都继承自 UIView,对应MVC中的 V。UIView及其子类主要负责UI的实现,而UIView所产生的事件都可以采用委托的方式,交给UIViewController实现。对于不同的UIView,都有相应的UIViewController 对应MVC中的C。比如在iPhone OS上常用的UITableView,它所对应的Controller就是UITableViewController。至于MVC中的M,那需要根据用户自己的需求来实现了。

下面看一下一个自定义UIView的架构是怎么样的。这之前要认识一下Objective-C中的几个重要的关键字。
@interface 定义一个类,这个很容易和Java中的interface混淆。
@protocol 定义一个协议,我跟喜欢把它理解成一个接口,相当于Java中的interface。
Objective-C只支持单继承,但可以实现多个协议(接口),语法如下:

@interface Child : Parent <Protocol1,Protocol2> { //成员变量定义 } //成员方法,类方法,属性定义 @end  
有了以上的知识后,我们就可以来定义自己的UIView了。
首先是定义一个UIView的子类。

@interface MyUIView : UIView { //定义一些控件 id<MyUIViewDelegate> delegate; //这个定义会在后面的解释,它是一个协议,用来实现委托。 } //定义一些控件设置方法 @property id<MyUIViewDelegate> delegate; //定义一个属性,可以用来进行get set操作 @end  
然后定义一个Protocol,按照Cocoa的习惯,一般它以delegate结尾,熟悉C#的同学应该知道它的意义。其实不论是接口,委托,还是回调函数,本质上都做了一件事情。就是定义了一个操作契约,然后由用户自己来实现它的具体内容。

@protocol MyUIViewDelegate //这里只需要声明方法 - (void)func1 - (int)func2:(int)arg @end 

完成以上两步之后就需要设计自己的UIViewController了。一般简单的做法,可以让这个Controller来实现上面定义的MyUIViewDelegate。在Cocoa框架中,很多控件和它的Controller都是采用的这种方式。

@interface MyUIViewController : UIViewController <MyUIViewDelegate> { //成员变量 } //成员方法,类方法,属性 @end 

定义都完成了,到这里其实还看不出这三者是怎么联系起来的。那接下来就要看看,MyUIView和MyUIViewController的具体实现了。

首先是MyUIView的实现代码,假设在MyUIView在发生某个事件后会调用doSometing方法。

- (void)doSomething { if( delegate != nil ) //这里的delegate就是UIView定义时候的一个委托对象 { [delegate func1]; //[]表示对一个对象发消息,如果在Java中会写成delegate.func1() } } 

上面的代码中 nil 相当于 Java中的 null,这里的意思就很明显了,如果delegate委托对象不为空,则调用相应的方法,但是这个委托对象的方法在哪里实现呢。可以看一下MyUIViewController的定义,它实现了MyUIViewDelegate。所以这个方法当然是由它来实现。代码如下

- (id)init { MyUIView *myView = [[MyUIView alloc] init]; //对MyUIView进行初始化 myView.delegate = self; //将MyUIViewController自己的实例作为委托对象 self.view = myView; } - (void)func1 { //具体实现,可以加入Model相关的代码 } 

这么一来整个,整个代码的线路就明白了。
1.MyUIViewController初始化
2.MyUIViewController初始化时初始化MyUIView,并且将自己作为委托对象赋值给MyUIView
3.MyUIView发生事件,调用(回调)委托对象的方法,其实就是调用MyUIViewController的方法。

Cocoa的MVC架构分析

Cocoa是Mac OS和iPhone OS上的开发框架,使用Objective-C做为开发语言。当然,在代码中也可以嵌入C和C++的语句。初识Objective-C时会觉得它的语法很奇怪,但本质上和...
  • qwjcool
  • qwjcool
  • 2015年05月19日 10:59
  • 408

Cocoa的MVC架构分析

Cocoa是Mac OS和iPhone OS上的开发框架,使用Objective-C做为开发语言。当然,在代码中也可以嵌入C和C++的语句。初识Objective-C时会觉得它的语法很奇怪,但本质上和...

Cocoa的MVC架构分析

在Cocoa框架中: 所有的控件、窗口等都继承自 UIView,对应MVC中的 V。UIView及其子类主要负责UI的实现,而UIView所产生的事件都可以采用委托的方式,交给UIViewContr...

三层架构与MVC的简单区别分析

  • 2014年04月14日 14:24
  • 138B
  • 下载

obj-c编程15[Cocoa实例03]:MVC以及归档化示例

前面的博文里介绍了归档和解档,这里我们把它实际应用到一个简单的代码中去,将它作为一个多文档应用程序的打开和保存的背后支持。另外这里介绍一下MVC思想,这个在任何语言里都会有,它是一种设计思想,主要可以...
  • mydo
  • mydo
  • 2014年07月08日 09:03
  • 1717

对比Windows OOP与Cocoa MVC

本文我们将介绍Windows OOP与Cocoa MVC之间的对比,在Objective-C里,你必须明确地创建一个controller用来处理model和view之间的变化。其实MVC应该被称做MC...
  • strliu
  • strliu
  • 2012年05月07日 23:50
  • 383

《从零开始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式

MVC(Model-View-Controller,模型-视图-控制器)模式是相当古老的设计模式之一,它最早出现在Smalltalk语言中。现在,很多计算机语言和架构都采用了MVC模式。 MVC模式...

Cocoa中的设计模式(MVC模式\委托模式\键值观察模式)

Cocoa是围绕着一系列设计模式所创建的,其目的是让开发者的工作更加协调和更加高效。 1.模型-视图-控制器(MVC:model-view-controller)模式: Cocoa和Cocoa T...

《从零开始学Swift》学习笔记(Day67)——Cocoa Touch设计模式及应用之MVC模式

原创文章,欢迎转载。转载请注明:关东升的博客  MVC(Model-View-Controller,模型-视图-控制器)模式是相当古老的设计模式之一,它最早出现在Smalltalk语言中。现在,很多计...

Windows OOP与Cocoa MVC对比

原址:http://www.cocoachina.com/b/?p=251 封装不封装,这是个问题。  今天我在看Cocoa开发者邮件列表的时候,看到一个帖子,求助如何在两个View之...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Cocoa的MVC架构分析
举报原因:
原因补充:

(最多只允许输入30个字)