didLoadFromCCB方法的调用顺序
来源:互联网 发布:德军 知乎 编辑:程序博客网 时间:2024/06/17 21:51
该方法运行顺序和其(包含)继承体系顺序的逆序相同.
这意味着孩子的didLoadFromCCB将总是在其父的didLoadFromCCB之前调用.
比如GameScene.ccb中含有GameMenuLayer.ccb文件,则可认为前者是后者的父亲,后者是前者的儿子.前者有一个ivar _gameMenuLayer指向一个GameMenuLayer类的实例;后者的实例中也有一个ivar _gameScene指向一个前者的实例.
在这个例子中,如果我们编写GameMenuLayer类和GameScene类中的didLoadFromCCB实例方法分别如下:
//代码段0//In GameMenuLayer.m-(void)didLoadFromCCB{ CCLOG(@"enter didLoadFromCCB method : %@",self); //do anything you want...}//代码段1//In GameScene.m -(void) didLoadFromCCB{ _gameMenuLayer.gameScene = self;}
则这意味着代码段0的初始化方法会先于代码段1的方法调用,即在GameMenuLayer的didLoadFromCCB方法调用时,其_gameScene实例变量还未初始化.在GameMenuLayer中的所有需要有效_gameScene实例变量的代码都需要延后执行———-比如说,放到onEnter方法中运行.
如果你需要在GameMenuLayer实例中快速引用GameScene实例对象,你可以通过以下代码来完成;不过以下代码要在除节点init和didLoadFromCCB方法之外的地方调用,因为这些地方self.scene总为nil:
GameScene *tmp = (GameScene*)self.scene.children.firstObject;
我们可以在GameMenuLayer的onEnter方法中尝试一下:
-(void)onEnter{ [super onEnter]; GameScene *tmp = (GameScene*)self.scene.children.firstObject; CCLOG(@"in %@ : **** %@ must equ %@ ****!",NSStringFromSelector(_cmd), tmp,_gameScene);}
输出如下:
2015-09-26 18:25:37.801 LearnSpriteBuilder[6587:231964] in onEnter : **** <GameScene = 0x7b1b1720 | Name = > must equ <GameScene = 0x7b1b1720 | Name = > ****!
0 0
- didLoadFromCCB方法的调用顺序
- listview方法的调用顺序
- 构造方法的调用顺序
- category 方法调用的顺序
- java中构造方法的调用顺序
- Java方法调用的优先顺序
- AsyncTask内的各个方法调用顺序:
- AsyncTask内的各个方法调用顺序
- AsyncTask内的各个方法调用顺序
- Java中多态的方法调用顺序问题
- java构造方法的调用顺序
- view方法调用顺序
- UIViewController方法调用顺序
- 查看 方法调用顺序
- JFace TreeViewer 的内容提供器的方法调用顺序
- 关于java的多态方法调用顺序的问题
- view的执行过程,各种方法的调用先后顺序
- view的执行过程,各种方法的调用先后顺序
- ListView乱谈之ListView的滚动原理
- Android网络编程之搭建一个属于你自己的简单servlet服务端。
- 黑马程序员-----java基础(IO上)
- 杭电acm--2071
- 顶点动画原理和实例之MD2FrameAnimation
- didLoadFromCCB方法的调用顺序
- win8系统桌面自动刷新解决方案
- .Net 学习记录 首篇
- 大数据学习篇:hadoop深入浅出系列之HDFS(六) ——JavaAPI操作
- 课程设计
- set serveroutput on
- hdu5475An easy problem 线段树
- java中代理模式以及new和newInatance()的区别
- uva 108