`
qwjcool
  • 浏览: 69370 次
  • 性别: 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 应用程序中对象间的关系,涉及绘图和事件处理等核心功能。 - **第七章:其他 Cocoa 架构**:总结 Cocoa 支持的应用程序开发和扩展能力的主要架构。 #### 四、Cocoa ...

    cocoa编程之菜鸟入门

    - **MVC架构理解**:Model-View-Controller(模型-视图-控制器)是一种软件架构模式,广泛应用于Cocoa应用中。理解MVC可以帮助开发者更好地组织代码结构,提高代码的可维护性和可扩展性。 - **事件处理机制**:Cocoa...

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

    9. **Model-View-ViewModel (MVVM)**:虽然Cocoa最初设计为MVC,但在现代实践中,MVVM架构变得流行,它提倡更明确的边界和数据绑定,有助于编写更可测试和可维护的代码。 10. **Auto Layout**:一种布局管理系统,...

    Cocoa Programming for Mac OS X

    - **Model-View-Controller (MVC)**:Cocoa 遵循 MVC 架构模式,将数据模型、视图和控制器分开,使得代码更加模块化、易于维护。 - **可扩展性**:Cocoa 的设计鼓励使用继承和组合来扩展功能,这使得开发者能够轻松...

    苹果开发之Cocoa编程原书第4版

    2. **MVC设计模式**:Cocoa遵循模型-视图-控制器(MVC)设计模式,这是一种将业务逻辑、用户界面和数据存储分离的架构。理解MVC对于构建可维护和可扩展的Cocoa应用至关重要。 3. **Interface Builder**:Apple的...

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

    - **设计模式应用**:Cocoa采用了一系列成熟的设计模式,如MVC(模型-视图-控制器)等,帮助开发者更好地组织代码结构,提高代码的可维护性和可扩展性。 - **对象间的通讯机制**:掌握Cocoa中对象间通讯的方式,如...

    swift Cocoa编程教程

    3. **Cocoa设计模式**:Cocoa遵循Model-View-Controller (MVC)架构模式,将应用程序分为模型、视图和控制器三个部分。理解MVC的原理和实践是Cocoa编程的关键。 4. **Interface Builder**:这是Apple的可视化设计...

    苹果开发之Cocoa编程(第三版)(中文版)

    Cocoa Bindings是Cocoa的一大特色,它简化了MVC架构中模型与视图之间的数据同步。通过绑定,开发者可以自动更新UI元素以反映模型的变化,反之亦然,减少了手动更新的代码。 Core Data是Cocoa的数据持久化框架,它...

    Learning Cocoa With Objective-C

    书中还会详细介绍Cocoa的设计模式,如Model-View-Controller(MVC)架构,这是一种将应用程序的数据、显示和用户交互分离的方法,有助于保持代码的清晰和可维护性。此外,还会涉及事件处理、NIB文件(用于存储用户...

    Cocoa.Programming.for.Mac.OS.X.4th.Edition PDF正式版

    3. MVC架构:模型-视图-控制器(Model-View-Controller, MVC)是Cocoa应用程序中最常用的架构模式,本书会对这一模式进行深入解释,并指导读者如何在Cocoa应用中实现MVC架构。 4. 用户界面设计:在Cocoa编程中,...

    cocoa 基本原理指南

    - “核心应用程序架构”:分析Cocoa应用程序的核心架构,涉及绘图和事件处理等方面。 - “其他Cocoa架构”:总结Cocoa支持的应用程序开发和扩展功能的主要架构。 #### 四、Cocoa开发入门指南 - **前置知识**:...

    Cocoa基本原理指南-中文版

    - MVC模式:详解MVC模式在Cocoa中的应用。 - 其他设计模式:除了MVC外,还有哪些设计模式被Cocoa采用。 5. **和对象进行通讯** - 通讯机制:讨论Cocoa对象之间通信的方式,如委托、通知、键值编码等。 - 编程...

    cocoa基本原理指南

    Cocoa框架支持核心应用程序架构,其基本原理包括模型-视图-控制器(MVC)设计模式。这种设计模式强调将应用程序分为三部分,模型负责数据和业务逻辑、视图负责用户界面显示、控制器则是两者之间的中介,负责接收用户...

    Cocoa.Programming.for.Mac.OS.X.4th.Edition 源代码

    3. **MVC架构**:Cocoa严格遵循MVC模式,将数据模型、视图和控制器分离,以便于代码的维护和扩展。理解如何正确划分组件并协调它们之间的通信至关重要。 4. **内存管理**:在Objective-C中,Cocoa使用Automatic ...

Global site tag (gtag.js) - Google Analytics