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平台感兴趣的同学可以去研究一下,挺有意思的。
分享到:
相关推荐
【Cocoa基础指南介绍】 Cocoa是Apple macOS和iOS操作系统上的主要应用程序开发框架,它为开发者提供了构建高质量、高效能应用程序的工具...理解并掌握Cocoa的基本原理和架构,是成为一名合格的Cocoa开发者的必要步骤。
- **第六章:核心应用程序架构**:分析 Cocoa 应用程序中对象间的关系,涉及绘图和事件处理等核心功能。 - **第七章:其他 Cocoa 架构**:总结 Cocoa 支持的应用程序开发和扩展能力的主要架构。 #### 四、Cocoa ...
- **MVC架构理解**:Model-View-Controller(模型-视图-控制器)是一种软件架构模式,广泛应用于Cocoa应用中。理解MVC可以帮助开发者更好地组织代码结构,提高代码的可维护性和可扩展性。 - **事件处理机制**:Cocoa...
9. **Model-View-ViewModel (MVVM)**:虽然Cocoa最初设计为MVC,但在现代实践中,MVVM架构变得流行,它提倡更明确的边界和数据绑定,有助于编写更可测试和可维护的代码。 10. **Auto Layout**:一种布局管理系统,...
- **Model-View-Controller (MVC)**:Cocoa 遵循 MVC 架构模式,将数据模型、视图和控制器分开,使得代码更加模块化、易于维护。 - **可扩展性**:Cocoa 的设计鼓励使用继承和组合来扩展功能,这使得开发者能够轻松...
2. **MVC设计模式**:Cocoa遵循模型-视图-控制器(MVC)设计模式,这是一种将业务逻辑、用户界面和数据存储分离的架构。理解MVC对于构建可维护和可扩展的Cocoa应用至关重要。 3. **Interface Builder**:Apple的...
- **设计模式应用**:Cocoa采用了一系列成熟的设计模式,如MVC(模型-视图-控制器)等,帮助开发者更好地组织代码结构,提高代码的可维护性和可扩展性。 - **对象间的通讯机制**:掌握Cocoa中对象间通讯的方式,如...
3. **Cocoa设计模式**:Cocoa遵循Model-View-Controller (MVC)架构模式,将应用程序分为模型、视图和控制器三个部分。理解MVC的原理和实践是Cocoa编程的关键。 4. **Interface Builder**:这是Apple的可视化设计...
Cocoa Bindings是Cocoa的一大特色,它简化了MVC架构中模型与视图之间的数据同步。通过绑定,开发者可以自动更新UI元素以反映模型的变化,反之亦然,减少了手动更新的代码。 Core Data是Cocoa的数据持久化框架,它...
书中还会详细介绍Cocoa的设计模式,如Model-View-Controller(MVC)架构,这是一种将应用程序的数据、显示和用户交互分离的方法,有助于保持代码的清晰和可维护性。此外,还会涉及事件处理、NIB文件(用于存储用户...
3. MVC架构:模型-视图-控制器(Model-View-Controller, MVC)是Cocoa应用程序中最常用的架构模式,本书会对这一模式进行深入解释,并指导读者如何在Cocoa应用中实现MVC架构。 4. 用户界面设计:在Cocoa编程中,...
- “核心应用程序架构”:分析Cocoa应用程序的核心架构,涉及绘图和事件处理等方面。 - “其他Cocoa架构”:总结Cocoa支持的应用程序开发和扩展功能的主要架构。 #### 四、Cocoa开发入门指南 - **前置知识**:...
- MVC模式:详解MVC模式在Cocoa中的应用。 - 其他设计模式:除了MVC外,还有哪些设计模式被Cocoa采用。 5. **和对象进行通讯** - 通讯机制:讨论Cocoa对象之间通信的方式,如委托、通知、键值编码等。 - 编程...
Cocoa框架支持核心应用程序架构,其基本原理包括模型-视图-控制器(MVC)设计模式。这种设计模式强调将应用程序分为三部分,模型负责数据和业务逻辑、视图负责用户界面显示、控制器则是两者之间的中介,负责接收用户...
3. **MVC架构**:Cocoa严格遵循MVC模式,将数据模型、视图和控制器分离,以便于代码的维护和扩展。理解如何正确划分组件并协调它们之间的通信至关重要。 4. **内存管理**:在Objective-C中,Cocoa使用Automatic ...