分类: 系统运维
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方法中将自己从通知中心中移除。