• 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
    
  • 相关阅读:
    spring boot activiti 整合
    接管SpringBoot对Activiti的数据源自动配置
    springboot集成activiti6.0多数据源的配置
    activiti 如何使用database前缀来区分activiti数据库和业务数据库
    SpringBoot开发案例之整合Activiti工作流引擎
    Activiti6简明教程
    springboot activiti 配置项详解
    Activiti搭建
    spring boot 2.0 报错:“jdbcUrl is required with driverClassName.” 解决办法!
    TCP的可靠传输机制(简单好理解:分段与流,滑窗,连接,流量控制,重新发送,堵塞控制)
  • 原文地址:https://www.cnblogs.com/disappear/p/3984614.html
Copyright © 2020-2023  润新知