通知(NSNotification、NSNotificationCenter)

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;

猜你喜欢

转载自blog.csdn.net/qq_33656996/article/details/81773755
今日推荐