Cocoa开发框架学习 回调函数

移动开发 iOS
本文介绍的是Cocoa开发框架学习 回调函数,与delegate,protocol相关,先来看内容。

Cocoa开发框架学习 回调函数是本文要介绍的内容,在阅读之前,如果你不是对本篇文章很了解,请来阅读 Cocoa学习笔记 MVC架构分析 。我们先来看本文内容。

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

  1. @interface Child : Parent <Protocol1,Protocol2> { //成员变量定义 } //成员方法,类方法,属性定义 @end  

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

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

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

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

  1. @protocol MyUIViewDelegate //这里只需要声明方法 - (void)func1 - (int)func2:(int)arg @end  

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

  1. @interface MyUIViewController : UIViewController <MyUIViewDelegate> { //成员变量 } //成员方法,类方法,属性 @end  

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

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

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

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

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

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

1.MyUIViewController初始化

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

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

小结:Cocoa开发框架学习 回调函数的内容介绍完了,希望本文对你有所帮助。

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

2011-06-15 11:05:14

C语言回调函数

2011-06-15 16:11:51

UIKitCocoa TouchiOS

2012-02-01 10:33:59

Java

2011-07-25 14:27:10

Objective-C 协议 函数

2011-05-20 17:19:25

回调函数

2009-08-12 10:11:18

C# 回调函数

2019-11-05 10:03:08

callback回调函数javascript

2022-04-12 08:30:52

回调函数代码调试

2011-07-07 13:51:24

Cocoa 框架

2011-05-20 17:59:06

回调函数

2010-02-04 16:07:39

C++回调函数

2009-11-04 11:32:20

VB.NET回调函数

2009-08-19 17:10:09

C#回调函数

2011-06-17 16:23:49

Cocoa苹果

2022-03-08 11:17:54

函数指针回调函数C语言

2023-04-18 08:10:10

2010-01-06 16:40:11

.Net Framew

2009-07-31 16:25:29

C#回调函数API应用

2021-01-14 07:52:24

JavaScript回调函数

2022-04-18 08:34:29

回调函数命令解析
点赞
收藏

51CTO技术栈公众号