你的位置:首页 > 操作系统

[操作系统]IOS NSNotification Center 通知中心的使用

  通知中心,它是IOS程序内部的一种消息广播机制,通过它,可以实现无引用关系的对象之间的通信。通知中心他是基于观察者模式,它只能进行程序内部通信,不能跨应用程序进程通信。当通知中心接受到消息后会根据设置,将消息发送给订阅者,这里的订阅者可以有多个。

  通知中心与代理模式类似,都可以实现多个对象间通信,通知中心可以将一个通知发送给多个监听者,而代理模式每个对象只能添加一个代理。但无论是那种模式,都是一种低耦合的设计,实现对象间的通信。

使用通知中心的步骤

1、注册观察者对某个事件(以字符串命名)感兴趣,并设置该事件触发时执行的Selector或Block

2、NSNotificationCenter在某个时机激发事件(以字符串命名)

3、观察者在收到感兴趣的事件时,执行相应地Selector或Block

4、移除通知

通知中心案例

  利用导航添加三个界面,在第三个界面上添加一组按钮,当点击按钮的时候,设置当前页面背景色为按钮颜色,并发送通知,将前面两个界面背景色也设置为选择的颜色,程序框架和界面如图所示

 

  (1)注册通知,在界面三的viewDidLoad方法中,为界面一和界面二注册通知,当发送通知的时候,会去界面一和界面二中调用对应的方法

  界面三中代码:

- (void)viewDidLoad {  [super viewDidLoad];    SecondViewController *secondVC = [self.navigationController.viewControllers objectAtIndex:1];  ViewController *firstVC = [self.navigationController.viewControllers firstObject];  //注册通知  [[NSNotificationCenter defaultCenter] addObserver:secondVC selector:@selector(changeBgColor:) name:kNotificationName object:nil];  [[NSNotificationCenter defaultCenter] addObserver:firstVC selector:@selector(changeBgColor:) name:kNotificationName object:nil];}

  ps:kNotificationName 是通过宏定义定义的字符串

 

  (2)    在界面三点击颜色按钮时,换背景色,并且给界面一和界面二发送通知

  界面三中代码:

- (IBAction)chooseBgColor:(UIButton *)sender {   NSArray *colorArray = @[[UIColor redColor],[UIColor blueColor],[UIColor greenColor],[UIColor purpleColor],[UIColor whiteColor],[UIColor blackColor],[UIColor orangeColor],[UIColor yellowColor],[UIColor brownColor]];    self.view.backgroundColor = [colorArray objectAtIndex:sender.tag-1];    //引发通知  [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationName object:[colorArray objectAtIndex:sender.tag-1]]; }

 

  (3)在界面一和界面二中处理通知,更改界面背景色

  界面一和界面二中代码:

-(void)changeBgColor:(NSNotification *)notification{  [self.view setBackgroundColor:notification.object];}


  (4)在界面三移除通知,移除通知一般在重写父类的dealloc方法,但是arc方式下,在dealloc方法中不能调用父类的dealloc方法

  界面三中代码:

-(void)dealloc{   [[NSNotificationCenter defaultCenter] removeObserver:kNotificationName];}

 

  想要了解更多内容的小伙伴,可以点击查看源码,亲自运行测试。

  疑问咨询或技术交流,请加入官方QQ群:JRedu技术交流 (452379712)

 

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
 

跟团去四川旅游多少钱几月去四川旅游最好去四川的旅游团价格去四川旅游必去景点去四川旅游要多少钱深圳东部华侨城及周边游什么好玩的? 盘龙峡生态旅游区官网?盘龙峡生态旅游区官方网站? 2015盘龙峡生态旅游区门票价格?盘龙峡生态旅游区好玩吗? 五一广州去哪玩好? 告别穹顶 南宁最便捷的清肺好去处 亚洲论坛永久会址地址?博鳌亚洲论坛永久会址在哪里? 大云雾山什么时候去最好?云浮大云雾山最佳旅游季节? 亚洲论坛永久会址怎么走?博鳌亚洲论坛永久会址门票多少钱? 深圳到中山逍遥谷怎么走?深圳到中山逍遥谷路线? 中山逍遥谷度假村团购价格?中山逍遥谷森林公园多少钱? 中山人民医院到逍遥谷怎样乘车?中山人民医院到逍遥谷乘车路线? 中山市五桂山逍遥谷怎么走?中山逍遥谷森林公园攻略? 马尔代夫满月岛怎么样?马尔代夫满月岛怎么去? 马尔代夫机场到天堂岛怎么走? 泰国哪个海滩好玩?泰国芭东海滩旅游 马尔代夫蜜月岛怎么样?马尔代夫蜜月岛怎么去? IDT5V5218PGGI8 Datasheet IDT5V5218PGGI8 Datasheet IDT71V3558S200BG Datasheet IDT71V3558S200BG Datasheet IDT72V3640L6PF Datasheet IDT72V3640L6PF Datasheet 牡丹江到港澳三天旅游 牡丹江到港澳三天旅游 牡丹江到港澳三天旅游 吉林去香港两天一晚游 吉林去香港两天一晚游 吉林去香港两天一晚游 佳木斯跟团香港两天一晚游 佳木斯跟团香港两天一晚游 佳木斯跟团香港两天一晚游