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就是namevalue就是NSArray(存放数据模型),里边存放观察者对象。
当发送通知时,在通知通知的字典,根据name找到value,这个value是个数组,数组里面存放数据模型(observer、SEL),即可执行对应的行为。

以上是关于iOS 通知(NSNotification)的主要内容,如果未能解决你的问题,请参考以下文章

ios8调用 - (void) onKeyboardShow:(NSNotification *)通知两次

关于iOS开发中NSNotification

IOS NSNotification Center 通知中心的使用

iOS NSNotification传递带参数的通知

这里是指推送通知跟NSNotification有区别:

iOS 项目中的NSNotification简单使用