1、NSNotification
这个类是通知类,由这个类创建的对象是一个通知对象,也可以理解为是一个消息对象。类中有三个成员变量:
name:是消息对象的唯一标识,接受通知消息时用来辨别
object:一个对象,可以理解为针对某个对象的消息
userInfo:一个字典,用来传值
@property (readonly,copy)NSNotificationName name;
@property (nullable,readonly,retain)id object;
@property (nullable,readonly,copy)NSDictionary *userInfo;
NSNotification初始化:
注意:NSNotification不可以使用init进行初始化(理解不懂)
【???? 不清楚这个初始化方法怎么用,求助小伙伴】对象方法初始化一个通知对象,并给通知对象的属性赋值
- (instancetype)initWithName:(NSNotificationName)name object:(nullableid)object userInfo:(nullableNSDictionary *)userInfoNS_AVAILABLE(10_6, 4_0) NS_DESIGNATED_INITIALIZER;
类方法创建一个通知对象,这个方法没有userInfo这个属性的初始赋值,所以用来发送无传值的通知
+ (instancetype)notificationWithName:(NSNotificationName)aName object:(nullableid)anObject;
类方法初始化一个通知对象,并给通知对象的属性赋值 anObject为接受对象
+ (instancetype)notificationWithName:(NSNotificationName)aName object:(nullableid)anObject userInfo:(nullableNSDictionary *)aUserInfo;
2、NSNotificationCenter
用来 “发送通知” 和 “接受通知”
这个类是通知中心类,内部实现是单利模式,每个程序都有一个默认的通知中心,用来调度通知的发送和接受。
通知中心类相关方法:
a、接收通知的方法:
添加观察者,可以指定一个方法、名称和对象,接受到通知时执行这个指定的方法。这里的name就是通知类的name,只有对应才能接受到通知。
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(nullableNSNotificationName)aName object:(nullableid)anObject;
b、发送通知的3种方法:
发送通知,参数是一个通知对象
- (void)postNotification:(NSNotification *)notification;
发送通知,参数是通知的名称,指定的对象
- (void)postNotificationName:(NSNotificationName)aName object:(nullableid)anObject;
发送通知,参数是通知的名称,指定的对象和传递的参数
- (void)postNotificationName:(NSNotificationName)aName object:(nullableid)anObject userInfo:(nullableNSDictionary *)aUserInfo;
上面这三个方法虽然写法不同,但是功能一样,使用哪一个方法取决于NSNotification类如何创建对象。后两种方法其实就是初始化通知并发送通知,将通知对象的初始化和发送方法结合。
c、移除通知的方法:
在-(void)dealloc{}中
移除该检测对象(observer)下的所有通知
- (void)removeObserver:(id)observer;
根据通知名称(aName),移除该检测对象(observer)下的一个通知
- (void)removeObserver:(id)observer name:(nullableNSNotificationName)aName object:(nullableid)anObject;