收听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;
}

 

posted @ 2014-10-09 09:48  safiri  阅读(176)  评论(0编辑  收藏  举报