CCNotificationCenter事件监听器
2015-06-26 14:17
465 查看
转自 点击打开链接
CCNotificationCenter事件监听器也好,观察者模式也罢,这个东西的用处就是用在俩个类通信的时候,一个类用来发送消息,一个类用来接收消息。其实这个东西的用处是非常大的,举个例子吧。比如一片草地,会在不同的季节反应出不同的状态,春天的时候草长了出来,都是绿的,夏天的时候草长的更高了,秋天的时候又会变颜色,在四季更换的不同状态下,草的颜色也会跟着发生改变,也就是会对应不同的状态,这个天气信息就可以看成发送过来的消息,而对这些消息的处理就是状态之间的相互切换。我也不知道说的正确不正确,但是推荐给大家一篇博客,不理解的可以看看。事件驱动,你想象不到的强大。下面我来说说怎么用这个东西,以及用的时候要注意的一些问题。
CCNotification采用了单例的设计模式,使用函数addObserver来监听消息。这段代码我写在了init中。
接下来就是使用post来发送消息了。
释放消息一般写在onExit()函数中,就是谁监听消息,谁释放消息。
CCNotificationCenter事件监听器也好,观察者模式也罢,这个东西的用处就是用在俩个类通信的时候,一个类用来发送消息,一个类用来接收消息。其实这个东西的用处是非常大的,举个例子吧。比如一片草地,会在不同的季节反应出不同的状态,春天的时候草长了出来,都是绿的,夏天的时候草长的更高了,秋天的时候又会变颜色,在四季更换的不同状态下,草的颜色也会跟着发生改变,也就是会对应不同的状态,这个天气信息就可以看成发送过来的消息,而对这些消息的处理就是状态之间的相互切换。我也不知道说的正确不正确,但是推荐给大家一篇博客,不理解的可以看看。事件驱动,你想象不到的强大。下面我来说说怎么用这个东西,以及用的时候要注意的一些问题。
1 | //将消息名定义在一个头文件中 |
2 | #ifndef _NOTIFICATION_H_ |
3 | #define _NOTIFICATION_H_ |
4 |
5 | #define MY_NOTIFICATION "Hello" |
6 |
7 | #endif |
1 | //第一个参数是监听消息的对象,第二个参数是消息发来的时候调用的函数,第三个参数消息的名字 |
2 | //第四个参数消息体 |
3 | CCNotificationCenter::sharedNotificationCenter()->addObserver( this , |
4 | callfuncO_selector(TestScene::getNotification),MY_NOTIFICATION,NULL); |
1 | //第一个参数是监听消息的对象,第二个参数是消息发来的时候调用的函数,第三个参数消息的名字 |
2 | //第四个参数消息体 |
3 | CCNotificationCenter::sharedNotificationCenter()->addObserver( this , |
4 | callfuncO_selector(TestScene::getNotification),MY_NOTIFICATION,NULL); |
1 | //监听消息的函数 |
2 | void TestScene::getNotification(CCObject * object) |
3 | { |
4 | int * i = ( int *)object; |
5 | CCLog( "HelloWorld i = %d" ,i); |
6 | } |
1 | void HelloWorld::menuCloseCallback(CCObject* pSender) |
2 | { |
3 | //注意1、在发送消息之前一定要先初始化TestScene,这个时候在TestScene的init方法中已经注册了消息,也就是 |
4 | //调用了addObserver函数,否则的话是接受不到消息的 |
5 | CCDirector::sharedDirector()->replaceScene(TestScene::scene()); |
6 |
7 | //第一个参数是消息的名字,第二个参数是CCObject * 类型的消息值,也就是你要发送的东西 |
8 | CCNotificationCenter::sharedNotificationCenter()->postNotification(MY_NOTIFICATION,(CCObject *)1); |
9 | } |
1 | void TestScene::onExit() |
2 | { |
3 | //注意最后一定要释放消息,否则内容泄露 |
4 | CCNotificationCenter::sharedNotificationCenter()->removeObserver( this ,MY_NOTIFICATION); |
5 | //返回值是int类型,表示释放的监听消息的个数 |
6 | //int ret = CCNotificationCenter::sharedNotificationCenter()->removeAllObservers(this); |
7 | //CCLog("%d",ret); |
8 | } |
1 | //第一个参数是监听消息的对象,第二个参数是消息发来的时候调用的函数,第三个参数消息的名字 |
2 | //第四个参数消息体 |
3 | CCNotificationCenter::sharedNotificationCenter()->addObserver( this , |
4 | callfuncO_selector(TestScene::getNotification),MY_NOTIFICATION,NULL); |
相关文章推荐
- [web安全] 浏览器安全
- 信道 频段 带宽 速率 几点总结
- opensslBIO系列之4---BIO控制函数介绍
- 安卓自启动源码
- PHPMyAdmin在Window下的安装
- maven 之 profile
- 调用dll时出现"Unhandled exception 堆已损坏(heap corruption)“异常解决方法
- JVM 运行原理
- openCV之头文件分析
- BIO系列之3---BIO的声明和释放等基本操作
- IE兼容BUG汇总及解决方案(持续更新)
- gre报名考试的流程是什么?
- android菜鸟学习笔记1----环境搭建
- C#中关于set和get方法的写法
- 1.最小堆实现
- opensslBIO系列之2---BIO结构和BIO相关文件介绍
- Android消息队列模型
- android studio 开发android项目使用百度地图时候出错
- webView地址拼接
- Android开发入门书籍推荐