zoukankan      html  css  js  c++  java
  • NSnotificationcenter

    对象之间进行通信最基本的方式就是消息传递,在Cocoa中提供Notification Center机制来完成这一任务。其主要作用就是负责在任意两个对象之间进行通信。使用方法很简单,如下几个步骤即可:

    假设A与B之间进行通信,B来触发事件,A接受该事件,并作出响应。
    1) A编写自定义的消息响应函数update
    2) A向消息中心注册,[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(update) name:@"update" object:nil]
    3) B触发事件[[NSNotificationCenter defaultCenter] postNotificationName:@"update" object:nil]

    每一个进程都有一个默认的NSNotificationCenter,可以通过类方法defaultCenter获取该消息中心的实例。消息中心可以处理同一进程中不同对象之间的消息。如果要在同一台机器上进行进程间的通信,需要使用NSDistributedNotificationCenter。

    消息中心以同步的方式将消息分发到所有的观察者中,换言之,直到所有的观察者都收到消息并处理完毕以后,控制权才会回到调用者的手里。如果需要异步的处理消息,需要使用通知队列NSNotificationQueue。

    在多线程程序中,通知会被分发到每一个发起消息的线程中,这可能与观察者注册时所在的线程已经不是同一线程。

    实例:
    @implementation TestClass  
      
    - (void) dealloc  
    {  
        // If you don't remove yourself as an observer, the Notification Center  
        // will continue to try and send notification objects to the deallocated  
        // object.  
        [[NSNotificationCenter defaultCenter] removeObserver:self];  
        [super dealloc];  
    }  
      
    - (id) init  
    {  
        self = [super init];  
        if (!self) return nil;  
      
        // Add this instance of TestClass as an observer of the TestNotification.  
        // We tell the notification center to inform us of "TestNotification"  
        // notifications using the receiveTestNotification: selector. By  
        // specifying object:nil, we tell the notification center that we are not  
        // interested in who posted the notification. If you provided an actual  
        // object rather than nil, the notification center will only notify you  
        // when the notification was posted by that particular object.  
      
        [[NSNotificationCenter defaultCenter] addObserver:self  
                                                 selector:@selector(receiveTestNotification:)   
                                                     name:@"TestNotification"  
                                                   object:nil];  
      
        return self;  
    }  
      
    - (void) receiveTestNotification:(NSNotification *) notification  
    {  
        // [notification name] should always be @"TestNotification"  
        // unless you use this method for observation of other notifications  
        // as well.  
      
        if ([[notification name] isEqualToString:@"TestNotification"])  
            NSLog (@"Successfully received the test notification!");  
    }  
      
    @end
    
  • 相关阅读:
    Linux curl命令详解
    drools 7 日期时间段校验
    java程序员常用查询和学习的网站
    springboot+mybatis+分页插件的使用
    Vue. 之 替换 左上角 title标签处的图标
    Github访问速度很慢的原因,以及解决方法
    vue插件总结——总有你能用上的插件
    在Java中如何高效的判断数组中是否包含某个元素
    解决vue刷新页面以后丢失store的数据
    vue路由跳转时组件data数据刷新
  • 原文地址:https://www.cnblogs.com/disappear/p/3984614.html
Copyright © 2011-2022 走看看