码迷,mamicode.com
首页 > 其他好文 > 详细

Delegate 与 Notification

时间:2015-05-04 12:06:38      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:delegate 与 notificat

Delegate 是协议的一种,顾名思义,就是委托他人帮自己去做什么事。也就是当自己做什么事情不方便的时候,就可以建立一个委托,这样就可以委托他人帮自己去实现什么方法。

我简单的总结了一下自己用到的委托的作用有两个,一个是传值,一个是传事件。
1.所谓传值经常用在b类要把自己的一个数据或者对象传给a类,让a类去展示或者处理。(切分紧耦合,和代码分块的时候经常用)
2.所谓传事件就是a类发生了什么事,把这件事告诉关注自己的人,也就是委托的对象,由委托的对象去考虑发生这个事件后应该做出什么反映。(这个经常见,例如在异步请求中,界面事件触发数据层改变等等)
3.利用委托赋值,这种方法感觉是为了不暴露自己的属性就可以给自己复值,而且这样更方便了类的管理,只有在你想要让别人给你赋值的时候才调用,这样的赋值更可控一些。(例如tableView中的委托(dateSource)中常见)。

Example:

技术分享

NSNotification: 这是一个观察者模式, 一方添加观察者,一方发出通知。

首先在你需要监听的类中加入观察者:

[[NSNotificationCenter defaultCenter] addObserver:self
    selector:(SEL)aSelector
    name:aName object:(id)anObject];

这个观察者在监听到anObject发送名字为aName的notification时,调用selector的方法,在aSelector方法中得到userInfo。
anObject表示从谁那儿发送出来的消息。
一般的selector中的方法可以这么写:

- (void)method: (NSNotification:)sender { NSDictionary *dict = [sender userInfo]; }

也就是说监听到了anObject发出消息,消息的名字是aName,此时observer就调用aSelector方法,把notification的userInfo拷贝到本地。

发送通知:

[[NSNotificationCenter defaultCenter] postNotificationName:aName object:self];

通知中心将会区分它们对象对这些通知感兴趣并且通知他们。如果除了关心观察者的通知名称和观察的对象,还关心其他之外的对象,那么就把之外的对象放在通知的可选字典中,或者用方法

postNotificationName:object:userInfo:
移除通知:removeObserver:和removeObserver:name:object:

[[NSNotificationCenter defaultCenter] removeObserver:observer name:nil object:self];

总结:IOS中消息传递机制有很多,针对不同的机制,我们应该怎样选择?以下纯属个人看法:

1. 当一个界面需要回调子界面的方法,并且与其他任何界面没有关联,可以考虑使用block。

2. 当很多界面都使用到相同的实现方法,可以考虑使用代理。

3. 两个界面看起来没有任何关联,但有一方需要随时监听外来的消息,可以考虑使用通知。


Delegate 与 Notification

标签:delegate 与 notificat

原文地址:http://blog.csdn.net/sinat_27706697/article/details/45476533

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!