通知中心(NSNotificationCenter)总结

一、简介

1. NSNotification 理解

NSNotification

@property (readonly, copy) NSString *name;
@property (readonly, retain) id object;
@property (readonly, copy) NSDictionary *userInfo;

NSNotification, 可以理解为一个消息对象, 其中有三个成员变量.

  • name, 是这个消息对象的唯一标识, 用于辨别消息对象.
  • object, 定义一个对象, 可以理解为针对某一个对象的消息.
  • userInfo, 是一个字典, 可以用其来进行传值.
    应用实例:
    • 广告页在 AppDelegate 里面处理广告业, 有广告业网址就发送通知. 在VC 里面接受通知, 利用接收到的 Object 来显示广告业.
    • 页面刷新, 加入是俩个状态的界面, 比如, 进行中和审核中, 当你提交订单, 刷新页面的时候, userInfo: {type : 3} 发送通知传过去, 在页面刷新的时候通用 type 3 来掉接口变成审核中的数据, 也让上面的现实状态变成审核中. (这里假设type 2 是进行中, type 3 是审核中, 上面有一个现实状态的滑动条).
    • 监听屏幕是横屏或者竖屏, 然后可以吧 AVPlayer 放到窗口个最前端, 全屏显示
    • 只要需要在未来某个时刻需要需要做什么事情的时候, 就可以使用通知.

2.NSNotification的初始化方法:

-(instancetype)initWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo;
+(instancetype)notificationWithName:(NSString *)aName object:(id)anObject;
+(instancetype)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

注意:官方文档有明确的说明,不可以使用init进行初始化

3. NSNotificationCenter

这个类是一个通知中心,使用单例设计,每个应用程序都会有一个默认的通知中心。用于调度通知的发送的接受。

  • 添加一个观察者,可以为它指定一个方法,名字和对象。接受到通知时,执行方法。

-(void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;

  • 发送通知消息的方法

-(void)postNotification:(NSNotification *)notification;
-(void)postNotificationName:(NSString *)aName object:(id)anObject;
-(void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

  • 移除观察者的方法

-(void)removeObserver:(id)observer;
-(void)removeObserver:(id)observer name:(NSString *)aName object:(id)anObject;

几点注意:
1、如果发送的通知指定了object对象,那么观察者接收的通知设置的object对象与其一样,才会接收到通知,但是接收通知如果将这个参数设置为了nil,则会接收一切通知。
2、观察者的SEL函数指针可以有一个参数,参数就是发送的死奥西对象本身,可以通过这个参数取到消息对象的userInfo,实现传值。


二、试用.

  • VC里面获取通知中心单列对象,同时添加观察者

通知中心(NSNotificationCenter)总结_第1张图片
VC里面获取通知中心单列对象,同时添加观察者
  • LC_VC里面创建通知发送通知

通知中心(NSNotificationCenter)总结_第2张图片
LC_VC里面创建通知发送通知
  • 结果

结果
通知中心(NSNotificationCenter)总结_第3张图片
这么看清晰

三.总结

NSNotificationCenter 是使用观察者模式来实现的用于跨层传递消息. 定义对象间的一种一对多的依赖关系. 当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并自动更新.

你可能感兴趣的:(通知中心(NSNotificationCenter)总结)