Cocoa学习笔记 MVC架构分析

移动开发 iOS
本文介绍的是Cocoa学习笔记 MVC架构分析,很详细的介绍了MVC架构,我们先来看内容。

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只支持单继承,但可以实现多个协议(接口),语法如下:

Objective-c代码 

  1. @interface Child : Parent <Protocol1,Protocol2>     
  2. {     
  3. //成员变量定义     
  4. }     
  5. //成员方法,类方法,属性定义     
  6. @end    
  7. @interface Child : Parent <Protocol1,Protocol2> 
  8. {  
  9. //成员变量定义  
  10. }  
  11. //成员方法,类方法,属性定义  
  12. @end   

有了以上的知识后,我们就可以来定义自己的UIView了。

首先是定义一个UIView的子类。

Objective-c代码 

  1. @interface MyUIView : UIView     
  2. {       
  3. //定义一些控件       
  4. id<MyUIViewDelegate> delegate; //这个定义会在后面的解释,它是一个协议,用来实现委托。     
  5. }     
  6. //定义一些控件设置方法     
  7. @property id<MyUIViewDelegate> delegate; //定义一个属性,可以用来进行get set操作     
  8. @end    
  9. @interface MyUIView : UIView  
  10. {  
  11. //定义一些控件  
  12. id<MyUIViewDelegate> delegate; //这个定义会在后面的解释,它是一个协议,用来实现委托。  
  13. }  
  14. //定义一些控件设置方法  
  15. @property id<MyUIViewDelegate> delegate; //定义一个属性,可以用来进行get set操作  
  16. @end   

然后定义一个Protocol,按照Cocoa的习惯,一般它以delegate结尾,熟悉C#的同学应该知道它的意义。其实不论是接口,委托,还是回调函数,本质上都做了一件事情。就是定义了一个操作契约,然后由用户自己来实现它的具体内容。

Objective-c代码 

  1. @protocol MyUIViewDelegate     
  2. //这里只需要声明方法     
  3. - (void)func1     
  4. - (int)func2:(int)arg     
  5. @end    
  6. @protocol MyUIViewDelegate  
  7. //这里只需要声明方法  
  8. - (void)func1  
  9. - (int)func2:(int)arg  
  10. @end  

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

Java代码 

  1. @interface MyUIViewController : UIViewController <MyUIViewDelegate>     
  2. {     
  3. //成员变量     
  4. }  
  5. //成员方法,类方法,属性     
  6. @end    
  7.  
  8. @interface MyUIViewController : UIViewController <MyUIViewDelegate> 
  9. {  
  10. //成员变量  
  11. }  
  12. //成员方法,类方法,属性  
  13. @end 

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

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

Objective-c代码 

  1. - (void)doSomething     
  2. {     
  3.     if( delegate != nil )  //这里的delegate就是UIView定义时候的一个委托对象     
  4.     {     
  5.         [delegate func1]; //[]表示对一个对象发消息,如果在Java中会写成delegate.func1()     
  6.     }     
  7. }    
  8. - (void)doSomething  
  9. {  
  10.     if( delegate != nil )  //这里的delegate就是UIView定义时候的一个委托对象  
  11.     {  
  12.         [delegate func1]; //[]表示对一个对象发消息,如果在Java中会写成delegate.func1()  
  13.     }  
  14. }  

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

Objective-c代码 

  1. - (id)init     
  2. {     
  3.     MyUIView *myView = [[MyUIView alloc] init]; //对MyUIView进行初始化     
  4.     myView.delegate = self; //将MyUIViewController自己的实例作为委托对象     
  5.     self.view = myView;      
  6. }     
  7.     
  8. - (void)func1     
  9. {     
  10.     //具体实现,可以加入Model相关的代码     
  11. }    
  12.  
  13. - (id)init  
  14. {  
  15.     MyUIView *myView = [[MyUIView alloc] init]; //对MyUIView进行初始化  
  16.     myView.delegate = self; //将MyUIViewController自己的实例作为委托对象  
  17.     self.view = myView;   
  18. }  
  19.  
  20. - (void)func1  
  21. {  
  22.     //具体实现,可以加入Model相关的代码  
  23. }  

这么一来整个,整个代码的线路就明白了。

1.MyUIViewController初始化

2.MyUIViewController初始化时初始化MyUIView,并且将自己作为委托对象赋值给MyUIView

3.MyUIView发生事件,调用(回调)委托对象的方法,其实就是调用MyUIViewController的方法。

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

小结:Cocoa学习笔记 MVC架构分析的内容介绍完了,希望本文对你有所帮助。

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-07-22 15:50:06

Cocoa MVC 视图

2011-07-26 15:29:36

Cocoa 模式

2011-07-26 10:42:00

Cocoa Cocoa2d 游戏

2011-05-11 15:27:58

Windows OOPCocoa MVCCocoa

2011-08-15 16:09:44

Cocoa对象Objective-C

2011-07-08 16:27:52

Cocoa Cocos2d 动作

2011-07-08 16:09:54

Cocoa Cocos2d 动作

2011-07-20 10:31:49

Cocoa Slider 颜色

2011-07-26 15:14:24

苹果 Cocoa 内存

2009-08-28 10:57:42

linux操作系统linux学习目录架构

2011-07-25 14:32:40

Cocoa 框架 函数

2011-08-10 18:37:32

CocoaMac OS X

2011-08-11 15:46:55

CocoaCocoa Touch框架

2011-11-24 21:54:05

优酷架构

2011-07-07 13:51:24

Cocoa 框架

2011-08-16 14:59:31

IOS开发ViewDidUnloiOS 5

2012-02-23 11:06:18

JavaPlay FramewPlay!

2016-12-19 11:17:48

架构 MVC

2011-07-20 09:49:41

Xcode Interface Builder

2011-07-07 13:39:14

Cocoa 框架
点赞
收藏

51CTO技术栈公众号