美文网首页
关于通知中心(NSNotification)的应用

关于通知中心(NSNotification)的应用

作者: 雨洒潇湘 | 来源:发表于2017-11-13 16:44 被阅读5次

    NSNotification的结构

    点进NSNotification类中进去,可以看到他的基本属性和一些方法。

    //消息的唯一标示,用来区分各个消息,也就是说具有唯一性。
    @property (readonly, copy) NSNotificationName name;
    //这个成员变量定义一个对象,可以理解为针对某一个对象的消息,也可以进行传值。
    @property (nullable, readonly, retain) id object;
    //这个字典可以进行传值。把你需要的参数传出去。
    @property (nullable, readonly, copy) NSDictionary *userInfo;
    

    初始化方式

    通知中心的创建,是以单例的形式创建。

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

    其中第一个参数,是向通知中心添加观察者。第二个参数,是接受到通知后相应的事件,第三个参数是消息的唯一标示。第四个参数是用于接收固定对象的通知。如果填写,则在对象发送通知时,也需要设置一致的固定对象。一般填写nil。接收所有对象发送的通知。
    发送通知的方法有两个,对应三种情况。

    无userInfo

    - (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject;
    

    很简单,将通知中心的唯一标示填进去就可以了,anObject可填写(有参),可不填写(无参),
    在响应通知的方法里,用object去接收参数。如果用userInfo去接受的话。userInfo则为nil。

    有userInfo

    - (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject userInfo:(nullable NSDictionary *)aUserInfo;
    

    可将需要的参数放入aUserInfo的字典中。在响应通知的方法中用userInfo去接受参数。

    通知的应用

    下面举个代码例子

    控制器A

    //创建通知中心
        [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(gotoHomeView:) name:@"NgotoHomeView" object:nil];
    //响应方法
    - (void)gotoHomeView: (NSNotification *)sender {
        NSInteger number = [[sender.userInfo valueForKey:@"number"] integerValue];
      
    }
    

    <控制器B

    //发送通知
        [[NSNotificationCenter defaultCenter]postNotificationName:@"NgotoHomeView" object:nil userInfo:@{@"number": @"0"}];
    

    当在控制器B里触发发送通知的方法,则在控制器A中会接收到通知,前提是A控制器已经创建。

    需要注意点

    最后通知中心需要移除,原则是在哪创建,在哪移除。上面的例子就是在控制器A中移除。保险起见将一处方法写在dealloc方法中,所以上面的例子还差一步

    - (void)dealloc {
    
        [[NSNotificationCenter defaultCenter]removeObserver:@”NgotoHomeView“];
    }
    

    最后需要注意的是如果创建通知中心时,object参数没有为空,则在发送通知的方法中,参数object应保持一致。否则将接收不到通知。

    相关文章

      网友评论

          本文标题:关于通知中心(NSNotification)的应用

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