`
qwjcool
  • 浏览: 68136 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Cocoa的MVC架构分析

阅读更多

Cocoa是Mac OS和iPhone OS上的开发框架,使用Objective-C做为开发语言。当然,在代码中也可以嵌入C和C++的语句。初识Objective-C时会觉得它的语法很奇怪,但本质上和其他面向对象语言都差不多。具体语法大家可以参考相关文档。

 

在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的编程模型进行了简单的分析,和大家交流一下。花了1个月时间学习Objective-C和Cocoa框架,感觉并不难学,熟悉面向对象的同学应该能比较快上手。当然,它的语法是比较奇怪,我到现在有时还会写错,但习惯成自然嘛。对Mac OS和iPhone OS平台感兴趣的同学可以去研究一下,挺有意思的。

 

12
1
分享到:
评论
7 楼 yjh_4866 2012-02-18  
- (id)init 

    MyUIView *myView = [[MyUIView alloc] init]; //对MyUIView进行初始化 
    myView.delegate = self; //将MyUIViewController自己的实例作为委托对象 
    self.view = myView;  
}

self.view怎么在init里创建的?如果不覆盖loadView,你创建的View就被修改了。self.view在 loadView里完成才好。
6 楼 chriszeng87 2011-07-25  
引用
其实不论是接口,委托,还是回调函数,本质上都做了一件事情。就是定义了一个操作契约,然后由用户自己来实现它的具体内容。
you dao li
5 楼 alan.hee 2010-05-26  
简单明了,谢谢。
4 楼 qwjcool 2008-11-11  
受教了 ,以后去用用看
3 楼 lgn21st 2008-11-11  
我知道有个macruby项目,就是嫌ruby的gc效率不好,而让Cocoa的GC来管理内存回收,当然,macrub创建的所有对象虽然披着ruby的马甲,其实是Cocoa对象...
2 楼 qwjcool 2008-11-11  
sdh5724 写道

GC效率好不。

刚学没多久,还没研究过
1 楼 sdh5724 2008-11-11  
GC效率好不。

相关推荐

    Cocoa 架构-中文版

    Cocoa 架构-中文版.pdf Cocoa 架构-中文版.pdf Cocoa 架构-中文版.pdf

    Cocoa 基本原理指南.pdf (中文)

    它从最 基础的信息开始 —即Cocoa有什么组件和能力,以考察Cocoa的主要架构作为结束。每一章都建立在前一章内容的基础上,每个部分都给出某个主题的重要细节,但又仅仅在较高的级别上进行描述。文中还提供很多指引,...

    cocoa基本原理指南

    " 从功能和大体架构的角度介绍什么是 Cocoa,描述它的各种特性、框架、和开发环境。 2. "Cocoa对象" 解释Objective-C的基本用法和优点,以及 Cocoa对象的常见行为、接口、和生命周期。 3. "为Cocoa程序添加行为" 描述...

    cocoa design patterns.pdf

    cocoa 设计模式 英文版,本书介绍了 cocoa 的基本设计模式,以 MVC 为基础,有助于更好地理解 cocoa 框架

    Learn Cocoa on the Mac Feb 2010.pdf

    How the various pieces of the Cocoa frameworks fit with each other and into the MVC architecture Which parts of Cocoa truly enable “visual programming”, letting you reap the benefits of proven, ...

    Cocoa基本原理指南

    始— 即 Cocoa 有什么组件和能力,以考察 Cocoa 的主要架构作为结束。每一章都建立在前一章内容的基 础上,每个部分都给出某个主题的重要细节,但又仅仅在较高的级别上进行描述。文中还提供很多指引, 方便读者...

    Cocoa Design Patterns

    Cocoa Design Patterns begins with the mother of all patterns: the Model-View-Controller (MVC) pattern, which is central to all Mac and iPhone development. Encouraged, and in some cases enforced by ...

    Cocoa 是什么?

    对于刚刚加入这个阵营的开发者来说,Cocoa 像是一个巨大而未知的新世界。Cocoa 开发环境的各种特性、工具、概念、术语、编程接口、甚至是编程语言对他们来说可能都比较生疏。Cocoa 基本原理指南提供了领略Cocoa 技术...

    Cocoa基本原理指南(2010年4月16日).zip

    1. "什么是Cocoa?" 从功能和大体架构的角度介绍什么是 Cocoa,描述它的各种特性、框架、和开发环境。 2. "Cocoa对象" 解释Objective-...7. "其它Cocoa架构" 总结Cocoa支持应用程序开发和扩展应用 程序能力的主要架构。

    Cocoa入门 使用Objective-C 第二版70m

    ·构建单一的和多窗口的基于文档架构的应用程序 ·用Cocoa的文本处理能力操作文本数据 ·用Cocoa来绘图 ·本地化您的应用程序以支持多语言 ·完善您的应用程序,添加用于Dock上的图标、提供帮助和打包发布。 在...

    Cocoa和CocoaTouch的模型框架Mantle.zip

    Mantle 是 Cocoa 和 Cocoa Touch 的模型框架,你可以通过它为你的 Cocoa 和 Cocoa Touch 写简单的模型层。示例代码:@interface XYUser : MTLModel @property (readonly, nonatomic, copy) NSString *name;...

    Cocoa基本原理指南(Cocoa Fundamentals Guide)

    Cocoa Fundamentals Guide 的中文版

    Cocoa Programming Developers Handbook(PDF and Source Code)

    Cocoa Programming Developer’s Handbook 书籍以及配套源码 对应的中文译本名《Cocoa编程开发者手册》,这里提供的是其原本,技术人员建议还是读原本。 《Cocoa编程开发者手册》是关于MacOSX上CocoaAPI的指南,...

    iOS and macOS Performance Tuning Cocoa, Cocoa Touch, Objective-C, and Swift

    iOS 和 macOS 性能优化书。iOS and macOS Performance Tuning Cocoa, Cocoa Touch, Objective-C, and Swift

    Cocoa基础指南介绍

    从官网复制的iOS开发参考文献:Cocoa基础指南介绍

    [Cocoa] Cocoa Objective-C 开发学习手册 第4版 (英文版)

    [奥莱理] Cocoa Objective-C 开发学习手册 第4版 (英文版) [奥莱理] Learning Cocoa with Objective-C 4th Edition (E-Book) ☆ 图书概要:☆ You’ll learn how to work with the Xcode IDE, Objective-C’s ...

    cocoa design patterns

    cocoa design patterns详细介绍cocoa frameworks 里面的核心程序设计架构。

    Learning Cocoa With Objective-C

    Cocoa编程经典的入门书籍,图文讲解,易于学习

    Learn Cocoa on the Mac, 2nd Edition

    The key to creating a modern Mac application is Cocoa. According to Apple, Cocoa is a set of object-oriented frameworks that provide a runtime environment for Mac OS X applications. As you make your ...

Global site tag (gtag.js) - Google Analytics