通知中心
- 通知中心-- 每一个应用程序中都有一个NSNotificationCenter的实例(对象),它是负责帮助不同的
对象
进行消息通信, - 任何一个
对象
都可以向 通知中心发布通知,描述自己在做什么事情,其他感兴趣的对象可以可以接收这个通知
上述是:A对象发布一个 通知到通知中心,对这个通知 感兴趣的对象B,C,D都可以来监听这个通知,来做一些事情。
通知
一个完整的通知包括3个属性:
- -(NSString *)name; // 通知的名称
- -(id)object; // 通知发布者(是谁要发布通知)
- -(NSDictionary *)userInfo; // 一些额外的信息(通知发布者传递给通知接收者的信息内容)
初始化一个通知对象
- +(instancetype)notificationWithName:(NSString *)aName object:(id)anObject;
- +(instancetype)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;
- -(instancetype)initWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo;
创建通知的步凑
- 发布通知
- 监听通知
- 处理通知
- 移除通知
1. 发布通知
//self这个对象发布了一个名字是 change的通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"changA" object:self];
//self这个对象发布一个changTextAction的通知,并且带有一个@{@"name":@"CC", @"age":@"18"}]的信息
[[NSNotificationCenter defaultCenter] postNotificationName:@"changTextAction" object:self userInfo:@{@"name":@"CC",
@"age":@"18"}];
2,监听通知
//self这个对象用TextAction:方法 监听OBJC对象 发布的一个叫做changTextAction的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(TextAction:) name:@"changTextAction" object:OBJC];
3.处理通知
TextAction:方法处理通知带来的信息@{@"name":@"CC", @"age":@"18"}
4,移除通知
-(void)removeObserver:(id)observer;
// 移除observer对象 监听 的 anObject对象发布的名为aName的通知
- (void)removeObserver:(id)observer name:(NSString *)aName object:(id)anObject;
补充
//监听通知
//name:通知名称
//object:谁发的通知
//queue:队列,决定block在哪一个线程中执行,nil则表示 是和发布通知的线程同步
//usingBlock:只要监听到通知,就会执行这个block
@property(nonatomic, weak) id observe;
_observe = [[NSNotificationCenter defaultCenter] addObserverForName:@"name" object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
}];
//注意:这个方法监听通知 但是没有添加观察者
//解决:其实这个方法有一个返回值(就是观察者) 要定义一个属性接收 然后移除这个观察者
//移除观察者
[[NSNotificationCenter defaultCenter] removeObserver: _observe];
通知多线程中的作用