美文网首页
NSNotification - 通知

NSNotification - 通知

作者: js_huh | 来源:发表于2020-07-10 17:55 被阅读0次

    是什么?

    • 一个完整的通知,包含3个属性:
      @property (readonly, copy) NSNotificationName name;
      @property (nullable, readonly, retain) id object;
      @property (nullable, readonly, copy) NSDictionary *userInfo;
      
      name 通知的名称,
      object 通知发布者(是谁要发布通知,可以是'监听者')
      userInfo 用户信息字典(通知发布者传递给通知接收者 [监听者] 的信息内容)
    • NSNotificationName 其实是NSString *的别名!
      typedef NSString *NSNotificationName;

    怎么使用?

    • + notificationWithName: object:
      返回具有指定名称和对象的新通知对象

      + (instancetype)notificationWithName:(NSNotificationName)aName 
                                    object:(id)anObject
      
    • + notificationWithName: object: userInfo:
      返回具有指定名称,对象和用户信息的通知对象

      + (instancetype)notificationWithName:(NSNotificationName)aName 
                                    object:(id)anObject 
                                  userInfo:(NSDictionary *)aUserInfo;
      
    • - init 初始化一个空的通知。

    • - initWithCoder:使用未归档的程序(如 plist文件)的数据, 来初始化通知
      - (instancetype)initWithCoder:(NSCoder *)coder

    • - initWithName: object: userInfo:
      使用指定的名称,对象和用户信息初始化通知

      - (instancetype)initWithName:(NSNotificationName)name 
                            object:(id)object 
                          userInfo:(NSDictionary *)userInfo
      

    示例代码

    • 代码如下 :
       //注册监听器(监听者:p1,监听所有对象发布的所有通知,监听到通知后,调用getMessage:方法)
      [[NSNotificationCenter defaultCenter] addObserver:p1 selector:@selector(getMessage:) name:nil object:nil];
      //创建通知 (通知发布者:compAL/compJD,创建名称为'notificationWithName'的通知)
      NSNotification * noteALText =  [NSNotification notificationWithName:alNoteTest object:compAL userInfo:@{@"title":@"Ara you OK"}];
      NSNotification * noteALTemp = [NSNotification notificationWithName:alNoteTemp object:compAL];
      NSNotification * noteJDText = [[NSNotification alloc]initWithName:jdNoteName object:compJD userInfo:@{@"noneTitle":@"JD come on"}];
      //发布通知
      [[NSNotificationCenter defaultCenter] postNotification:noteALText];
      [[NSNotificationCenter defaultCenter] postNotification:noteALTemp];
      [[NSNotificationCenter defaultCenter] postNotification:noteJDText];
      
        -(void)getMessage:(NSNotification *)note{
          NSLog(@"%@,接收到%@发送的%@,消息内容是:%@",self.name,[note.object name],note.name,note.userInfo);
      }
      
    • 输出结果 :
      张三,接收到阿里巴巴发送的军事新闻-通知,消息内容是:{
          title = "Ara you OK";
      }
      张三,接收到阿里巴巴发送的民生新闻-通知,消息内容是:(null)
      张三,接收到京东发送的717消费券-通知,消息内容是:{
          noneTitle = "JD come on";
      }
      

    也可以看看

    NSNotificationCenter - 通知中心
    模拟通知


    来自于哪里?

    • iOS-MJ-UI基础-大神班/day-11/05-模拟通知

    相关文章

      网友评论

          本文标题:NSNotification - 通知

          本文链接:https://www.haomeiwen.com/subject/cxqeqktx.html