zoukankan      html  css  js  c++  java
  • 收听NSNotificationCenter发出的通知

    1.问题

      想监听使用NSNotification广播的系统和自定义通知.

    2.讨论

      开始收听通知时,使用通知中心的 addObserver:selector:name:object:实例方法中对象参数指定源对象(广播)。 

      对每个参数的简单描述:

      addObserver :接收通知的对象 (观察者).

      selector:当通知观察者发布或者接收通知时观察者会调用选择器(方法)

      name:要接收的通知的名称

      object:有选择的明确发布通知的源对象,如果参数为 Nil,在不考虑源对象;如果已经设置了参数,那么只有指定对象且明确命名的通知被观察到。 

     3.例子

      将观察者放入通知中心之后,才能收听此时以后发出的通知.

      

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        //3.2收听 NSNotificationCenter 发出的通知
        //将观察者放入通知中心
        [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(appendingIsFinished:) name:@"ResultOfAppendingTwoStringsNotification" object:self];
        
        //3.1通过NSNotificationCenter 发送通知
        /*
         用const可以节省空间,避免不必要的内存分配。 例如:
         #define PI 3.14159 //常量宏
         const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 ......
         double i=Pi; //此时为Pi分配内存,以后不再分配!
         double I=PI; //编译期间进行宏替换,分配内存
         double j=Pi; //没有内存分配
         double J=PI; //再进行宏替换,又一次分配内存!
         const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。 */
        NSString *firstName = @"Anthony";
        NSString *lastName = @"Robbins";
        NSString *fullName = [firstName stringByAppendingString:lastName];
        NSArray *objects = [[NSArray alloc] initWithObjects:
                                                    firstName,
                                                    lastName,
                                                    fullName,
                                                    nil];
        NSArray *keys = [[NSArray alloc]initWithObjects:
                                                    @"firstString",
                                                    @"secondString",
                                                    @"resultString",nil];
        NSDictionary *userInfo = [[NSDictionary alloc]initWithObjects:objects forKeys:keys];
        //创建一个通知实例
        NSNotification *notificationObject = [NSNotification notificationWithName:@"ResultOfAppendingTwoStringsNotification" object:self userInfo:userInfo];
        //创建一个通知中心来发送通知
        [[NSNotificationCenter defaultCenter]postNotification:notificationObject];
        
        //注意:有时我们没有必要为每个通知都制定发送者和用户信息字典参数.如果你不打算携带发送者和用户信息字典,建议使用 NSNotificationCenter 中postNotificationName:object:的实例方法,第一个参数传入一个字符串代表通知的名字,第二个参数传入 nil。
        
        return YES;
    }
  • 相关阅读:
    学习DButils笔记
    ubuntu16.04 backup and restore
    Oracle 中 编写 function 和 procedure 的注意事项
    利用反射和JDBC元数据实现更加通用的查询方法
    Memcached
    HTML, CSS
    day35作业
    day34作业
    MySQL数据库
    并发编程
  • 原文地址:https://www.cnblogs.com/safiri/p/4011732.html
Copyright © 2011-2022 走看看