zoukankan      html  css  js  c++  java
  • iOS通知机制

      网上经常说iOS的通知机制是使用了观察者模式,里面有两个角色,其一是poster(发送者),另一个是observer(接受信息的订阅者)。但我认为重要的角色是通知中心,它是整个通知机制的核心,有poster发送者发送的消息必定要到达通知中心,再由通知中心根据这个消息被哪些observer订阅者订阅过,就把消息往那些订阅者去分发。整体可以与现在的电子邮件结构作类比的。但要额外说明一下,iOS的通知虽然也叫Notification通知,但是与Android中的通知是不一样的,在Android中的通知是一种消息推送的形式,而在iOS中肯定也有消息推送,这就是推送机制那部分的内容。说会这个通知机制的其实就是原本在学习C#时的事件,只不过这里的事件是对于整个系统的全局事件,任何一方往系统的这个全局事件去注册绑定了方法,到事件被触发的时候就能够被执行。

             整个通知的操作流程,我们只需要把poster和observer设置好就可以了

    对于Poster的操作比较简单,他只需要往通知中心推通知就可以了,采用以下的代码

    [[NSNotificationCenter defaultCenter] postNotificationName:@”PostOne” object:@”This is posterone”];

    或者

    [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:@”PostOne” object:@”This is posterone”]];

    NotificationWithName: object: 方法还有一个重载就是有userInfo: 参数,它是NSDictionary的字典类型,就是用于传递用户参数。

      对于Observer则相对没Poster那么简单,在C#中进行事件注册绑定的时候也发现,触发事件的只需要像调用方法那样子调用就可以了,但是注册那一方则需要为事件绑定方法,又要定义方法,而在iOS的通知机制中,需要注册,回调处理(就是事件中的方法定义),用完了还要去删除。

    注册

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callBack1:) name:@”PostOne” object: nil];

    这里的参数是跟postNotificationName: object:对应的。注册了哪个通知name参数就填上对对应的值

    回调处理

    -(void) callBack1(NSNotification*)notification
    {
        notification.name://通知的名称
        notification.object;//发送通知时的object
        notification.userInfo//发送通知时的userInfo
    }

    删除

    在使用消息完毕(就是不再对接收到的消息作处理的)之后,需要进行删除操作

    [[NSNotificationCenter defaultCenter]removeObserver: self];//删除所有注册过的通知
    [[NSNotificationCenter defaultCenter]removeObserver:self name:@”PostOne“ object:nil];//删除名称为”PostOne“的通知。
  • 相关阅读:
    使用批处理文件(.bat)启动Java程序
    VARCHAR2(%n)和VARCHAR2(%n char)区别
    Truncate Table
    Ext4之杂七杂八
    Oracle导表
    关于hibernate的session.createSQLQuery(sql)直接调用底层SQL后,返回结果集的问题
    Ext4真是难(展开表格行,显示图表)
    Hadoop学习笔记【入门】
    魅蓝note 做Android真机调试
    11-java学习笔记-反射
  • 原文地址:https://www.cnblogs.com/HopeGi/p/4150867.html
Copyright © 2011-2022 走看看