通知NSNotification

通知中心

  • 通知中心-- 每一个应用程序中都有一个NSNotificationCenter的实例(对象),它是负责帮助不同的 对象 进行消息通信,
  • 任何一个 对象都可以向 通知中心发布通知,描述自己在做什么事情,其他感兴趣的对象可以可以接收这个通知
通知NSNotification_第1张图片
1.png

上述是: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];

通知多线程中的作用





你可能感兴趣的:(通知NSNotification)