首页 > 代码库 > 收听NSNotificationCenter发出的通知

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

 

收听NSNotificationCenter发出的通知