zoukankan      html  css  js  c++  java
  • iOS开发之--NSNotificationCenter的使用

    NSNotification是IOS中一个调度消息通知的类,采用单例模式设计,在程序中实现传值、回调等地方应用很广

    iOS中通知中心NSNotificationCenter应用总结

    一、了解几个相关的类

    1、NSNotification

    这个类可以理解为一个消息对象,其中有三个成员变量。

    这个成员变量是这个消息对象的唯一标识,用于辨别消息对象。

    @property (readonly, copy) NSString *name;

    这个成员变量定义一个对象,可以理解为针对某一个对象的消息。

    @property (readonly, retain) id object;

    这个成员变量是一个字典,可以用其来进行传值。

    @property (readonly, copy) NSDictionary *userInfo;

    NSNotification的初始化方法:

    - (instancetype)initWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo;
    
    + (instancetype)notificationWithName:(NSString *)aName object:(id)anObject;
    
    + (instancetype)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

    注意:官方文档有明确的说明,不可以使用init进行初始化

    2、NSNotificationCenter

    这个类是一个通知中心,使用单例设计,每个应用程序都会有一个默认的通知中心。用于调度通知的发送的接受。

    添加一个观察者,可以为它指定一个方法,名字和对象。接受到通知时,执行方法。

    - (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;

    发送通知消息的方法:

    - (void)postNotification:(NSNotification *)notification;
    
    - (void)postNotificationName:(NSString *)aName object:(id)anObject;
    
    - (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;

    移除观察者的方法

    - (void)removeObserver:(id)observer;
    
    - (void)removeObserver:(id)observer name:(NSString *)aName object:(id)anObject;

    几点注意:

    1、如果发送的通知指定了object对象,那么观察者接收的通知设置的object对象与其一样,才会接收到通知,但是接收通知如果将这个参数设置为了nil,则会接收一切通知。

    2、观察者的SEL函数指针可以有一个参数,参数就是发送的死奥西对象本身,可以通过这个参数取到消息对象的userInfo,实现传值。

    二、通知的使用流程

    代码如下:

    //设置通知   
     //获取通知中心
        NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
        //通知中心 发送广播
        /*
         第一个参数就是通知的名字 第二个参数 谁发送的通知
            第三个参数 通知的内容
          
         这个方法内部会创建一个通知对象
         */
        //把通知的内容放入字典中
        NSDictionary *dict = @{@"status": @"123"};
         
        //自定义的通知
        [nc postNotificationName:@"tongzhi" object:self userInfo:dict];
     
     
    /***********************************************************************************/
    //接收通知
    //在viewDidLoad方法中注册观察者
    //提前创建观察者
            NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
            //注册观察者
            //接收任意对象发送的kNotificationChangeStatus通知
            [nc addObserver:self selector:@selector(changeLabelText:) name:@"tongzhi" object:nil];
     
     
    //实现接收通知方法
    - (void)changeLabelText:(NSNotification*)nf{
        //获取通知的内容
        NSDictionary *dict = nf.userInfo;
         
        NSString * isOn = dict[@"status"];
         NSLog(@"%@", isOn);
     
    }
    //最后别忘了  
    //删除观察者
    - (void)dealloc{
        //删除观察者
        [[NSNotificationCenter defaultCenter] removeObserver:self name:kNotificationChangeStatus object:nil];
    }
  • 相关阅读:
    Datatables 在asp.net mvc中的使用
    nexus离线安装索引及一些问题
    享元模式
    My97DatePicker的使用
    oracle定时器,调用存储过程,定时从n张表中取值新增到本地一张表中
    oracle触发器,一个表新增、修改的同时同步另一张表
    plsql客户端显示菜单等
    telnet测试制定地址端口号
    mybatis新增数据后获取自增主键
    ajax提交表单
  • 原文地址:https://www.cnblogs.com/hero11223/p/6473392.html
Copyright © 2011-2022 走看看