Chinaunix首页 | 论坛 | 博客
  • 博客访问: 639646
  • 博文数量: 133
  • 博客积分: 1566
  • 博客等级: 上尉
  • 技术积分: 1230
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-01 09:31
文章分类

全部博文(133)

文章存档

2019年(1)

2018年(1)

2017年(8)

2016年(9)

2015年(17)

2014年(4)

2013年(31)

2012年(25)

2011年(36)

2010年(1)

我的朋友

分类: 系统运维

2012-11-11 20:19:03

两者的基本共同点:传递消息,做些什么。

 一、Delegate委托(一对一之间)

   在解释委托之前,先提下回调。

   事件机制是典型的回调案例。

   为什么要使用回调机制?因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所以它需知道的只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。

   在Object-C中,机制相同,但实现手段不一样。采用协议的机制,定义一些在某些特定条件下调用的接口。因此在Oboject-C中更多地提到的是委托。

   应用案例:

       AView中声明一个协议AViewDelegate,其中声明了一些方法。然后在AView中声明一个AViewDelegate类型的属性delegate(委托)

       AViewController实现了关于AView的AViewDelegate协议中的方法,那么这个Controller就可以作为AView的委托delegate来执行某些特定的操作。

    回调和委托?我的个人观点,回调只是一种我们需要调用的功能,用委托的方式来实现了回调。在Obojcet-C编程中,很多声明的协议的命名,都以Delegate(委托)来命名,从字面上的简单理解,实现某个View的协议的类,可以作为这个View的委托,待其做某些行为。也就是说委托是存在于两者之间的,分为委托人和受托人,也就是说由受托人来帮委托人做些事情。个人感觉回调和委托在Object-C里面共同来谈的话有点混淆,感觉从委托的这个概念来应用理解协议这块技术使用更容易些

 

二、NSNotificationCenter(通知中心,多对多)

  理解通知中心的概念。每个运行中的application都有一个NSNotificationCenter的成员变量,它的功能类似公告栏。举例:对象注册关注某个确定的notification(如果有人捡到一只小狗,就去告诉我),我们把这些注册对象叫做observer,其它的一些对象会给center发送notification(我捡到了一只小狗)。Center将notifications转发给所有注册该notification感兴趣的对象。我们把这些发送notification的对象叫做poster。

 

1、获取通知中心的方法。

   NSNotificationCenter*ncc = [NSNotificationCenterdefaultCenter];

2、在中心注册消息接受者的方法。

- (void)addObserver: (id)anObserver  selector:@selector(methodX)  

name:(NSString*)notificationName

object:  (id) posterOb;

   第一个参数为需要收听消息的对象;

   第二个参数为接受对象收到消息后触发的方法;

   第三个参数相当于要收听的消息的“标题”;

   第四个参数为消息的发送者 --- 谁发送了这个消息。

此处需注意两点:

   第一点,如果notificationName参数为nil,那么通知中心会将发送者的所有notification发给接收者。

   第二点,如果posterOb参数为nil,那么通知中心将所有“标题”为notificationName的notification发给接收者。

3、发送消息至中心的方法。

   - (void) postNotificationName:(NSString *)notificationName

object:(id)anObject;

 

-(void) postNotificationName:(NSString *)notificationName

object:(id)anObject

userInfo:(NSDictionary *) info;

注:userInfo参数可使消息中传递更多的信息。

4、移除收听者的方法。

 (void)removeObserver:(id)observer

注意:每位收听者需在其相应的dealloc方法中将自己从通知中心中移除。

阅读(987) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~