Cocoa的MVC架构分析
来源:互联网 发布:php 图片与flash 编辑:程序博客网 时间:2024/05/03 05:33
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的MVC架构分析
- Cocoa的MVC架构分析
- Cocoa的MVC架构分析
- Cocoa的MVC架构分析
- spring mvc架构分析
- Android App 的设计架构:MVC、MVP、MVVM 的分析
- Android架构分析-MVC & MVP
- mvc架构的回顾
- MVC的三层架构
- MVC架构的参考
- MVC架构的缺点
- 架构:Android的MVC
- MVC架构的理解
- 基本的 MVC 架构
- C#的MVC架构
- MVC架构的理解
- 使用cocoa时必须遵守MVC的思想
- Spring MVC + Ibatis架构原理分析
- 无条件前传
- ListView的removeFooterView方法报java.lang.ClassCastException错误
- Latex学习笔记-参考文献篇
- 文档布局与定位梳理
- 我的GAE主页诞生了!
- Cocoa的MVC架构分析
- 添加web引用 的方法
- 感谢开源
- 过冬了
- 一级警报:到2019年数据泄露造成损失将达2.1万亿
- 产品设计的一些原则
- 肖鑫铭:金银承压小幅回落,数据不佳加息如梦
- 发现豆瓣上有个一块神秘的区域
- orcale中的递归算法