一、简介
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里面获取通知中心单列对象,同时添加观察者
-
LC_VC里面创建通知发送通知
-
结果
三.总结
NSNotificationCenter 是使用观察者模式来实现的用于跨层传递消息. 定义对象间的一种一对多的依赖关系. 当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并自动更新.