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