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
    
  • 相关阅读:
    bzoj1415 NOI2005聪聪和可可
    Tyvj1952 Easy
    poj2096 Collecting Bugs
    COGS 1489玩纸牌
    COGS1487 麻球繁衍
    cf 261B.Maxim and Restaurant
    cf 223B.Two Strings
    cf 609E.Minimum spanning tree for each edge
    cf 187B.AlgoRace
    cf 760B.Frodo and pillows
  • 原文地址:https://www.cnblogs.com/disappear/p/3984614.html
Copyright © 2011-2022 走看看