iOS 通知(NSNotification)
Posted xiaoxiaobukuang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 通知(NSNotification)相关的知识,希望对你有一定的参考价值。
一、通知
1、基本概念
NSNotification
是ios中一个调度消息通知的类,采用单例模式设计,在程序中实现传值、回调等地方应用很广。在iOS中,NSNotification & NSNotificaitonCenter是使用观察者模式来实现的用于跨层传递消息。
2、什么情况下使用通知
观察者模式:定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得道通知并自动更新。
二、通知的特点
- 是使用
观察者模式
来实现的用于跨层传递消息的机制; - 传递方式为一对多;
三、通知的使用
1、向观察者中心添加观察者
方法1:观察者接收到通知后执行任务的代码在发送通知的线程中执行
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(nullable NSNotificationName)aName object:(nullable id)anObject;
方法2:观察者接受到通知后执行任务的代码在指定的操作队列中执行
- (id <NSObject>)addObserverForName:(nullable NSNotificationName)name object:(nullable id)obj queue:(nullable NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *note))block
2、通知中心向观察者发送消息
- (void)postNotification:(NSNotification *)notification;
- (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject;
- (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject userInfo:(nullable NSDictionary *)aUserInfo;
3、观察者接收到消息执行相应的行为
4、在通知中移除观察者
- (void)removeObserver:(id)observer;
- (void)removeObserver:(id)observer name:(nullable NSNotificationName)aName object:(nullable id)anObject;
四、如何实现通知机制
概述:首先,信息的传递就依靠通知(NSNotification),也就是说,通知就是信息(执行的方法,观察者本身(self),参数)的包装。通知中心(NSNotificationCenter)是个单例,向通知中心注册观察者,也就是说,这个通知中心有个集合,这个集合存放着观察者。发送通知需要name参数,添加观察者也有个name参数,这两个name一样的时候,当发送通知时候,观察者对象就能接收到信息,执行对应的操作。那么这个集合大概率就是NDSictionary。
key
就是name
,value
就是NSArray
(存放数据模型),里边存放观察者对象。
当发送通知时,在通知通知的字典,根据name找到value,这个value是个数组,数组里面存放数据模型(observer、SEL),即可执行对应的行为。
以上是关于iOS 通知(NSNotification)的主要内容,如果未能解决你的问题,请参考以下文章
ios8调用 - (void) onKeyboardShow:(NSNotification *)通知两次