didLoadFromCCB方法的调用顺序
该方法运行顺序和其(包含)继承体系顺序的逆序相同.
这意味着孩子的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 = > ****!
didLoadFromCCB方法的调用顺序的更多相关文章
- python__基础 : 多继承中方法的调用顺序 __mro__方法
在多继承中,如果一个子类继承了两个平级的父类,而这两个父类有两个相同名字的方法,那么一般先继承谁,调用方法就调用先继承的那个父类的方法.如: class A: def test(self): prin ...
- JS两种声明函数的方法以及调用顺序
两种声明方法: 1. var a = function () {...}; 2. function a() {...}; 第一种方式必须先声明后调用,而第二种方式函数调用在声明之前之后都可以. //第 ...
- Activity生命周期方法的调用顺序project与測试日志
以下为測试activity的方法的运行顺序 project与測试资源地址 androidproject AndroidManifest.xml <? xml version="1. ...
- testNG中方法的调用顺序
今天在执行selnium的test case时,总是遇到空指针错误.但是以前也有run成功过,然后换了各种方法定位元素,都失败了,所以怀疑应该不是元素定位不到的问题,所以可能是method之间有依赖, ...
- viewDidLoad方法的调用顺序
https://www.evernote.com/shard/s227/sh/01307822-de66-448d-8bac-7954f01ffc64/185b44c2bf5b6e266f4bed ...
- cocos2d-x 2.x版本中,场景切换各方法调用顺序
假设从A场景切换到B场景,调用各场景方法的顺序为: 如果没有切换效果(transition),则先调用B的init(),再调用A的onExitTransitionStart(),接着调用A的onExi ...
- [iOS]为什么不要在init初始化方法里调用self.view
首先.如果你调用self.view的时候,就会调用view的getter方法, 这个时候,view是空的,那么系统就会自动给你创建一个view,然后就会触发ViewDidLoad方法.那么这个时候,如 ...
- 两个category方法相同调用哪个
Category扩展,它是对一个类进行功能的扩展.在项目的开发过程中,在不断的迭代开发过程中,我们的类也不可避免的要根据需求来增加新的功能,而这个时候很多的人可能会新建一个子类,然后在子类中去增加我们 ...
- AsyncTask内的各个方法调用顺序
|- AsyncTask内的各个方法调用顺序:|- 首先,用户调用execute方法,启动AsyncTask .然后在execute方法中:|- 首先调用onPreExecute方法,执行初始化操作. ...
随机推荐
- Unity3d导出Recast geomset.txt
Unity3d导出Recast geomset.txt (金庆的专栏) Recast Demo 输入需要 geomset.txt 文件来指定区域类型. 以ObjExporter.cs为基础,编写Uni ...
- python 3.3.3 字面量,正则,反斜杠和原始字符串
两个不起眼但是比较重要的设定 Python str类型的字面量解释器 当反斜杠及其紧接字符无法构成一个具有特殊含义的序列('recognized escape sequences')时,Python选 ...
- SSL协议相关证书文件
密钥: 我理解是公钥+私钥的统称. 密钥对: 公钥(证书)和私钥成对存在.通信双方各持有自己的私钥和对方的公钥.自己的私钥需密切保护,而公钥是公开给对方的.在windows下,单独存在的公钥一般是后缀 ...
- 使用Java正则表达式去掉Double类型的数据后面多余的0
方法 /** * 使用java正则表达式去掉多余的.与0 * @param s * @return */ public static String subZeroAndDot(String s){ i ...
- 3.2、Android Studio在物理设备中运行APP
当你构建一个Android应用时,在发布给用户之前,在物理设备上测试一下你的应用是非常必要的. 你可以使用Android设备作为运行.调试和测试应用的环境.包含在SDK中的工具让你在编译完成后在设备中 ...
- 对N各集合中的任意元素进行排列组合问题
小李去市场买菜,有蔬菜(茄子.黄瓜.大白菜...等k中素菜),和肉类(牛肉,羊肉,鸡肉...等m种荤菜),及点心(麻饼,桃酥,枣花...等n中点心),现在老婆要求每天一荤一素一点心 并且每天的样式要尽 ...
- Android简易实战教程--第十四话《模仿金山助手创建桌面Widget小部件》
打开谷歌api,对widget小部件做如下说明: App Widgets are miniature application views that can be embedded in otherap ...
- Xcode7.2使用sqlite3数据库的方法
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 之前版本的Xcode是可以直接连接sqlite3的库文件的,但 ...
- C++对C语言register的增强
register关键字 请求编译器让变量a直接放在寄存器里面,速度快 在c语言中 register修饰的变量 不能取地址,但是在c++里面做了内容 1 register关键字的变化 register关 ...
- (一〇二)静态库(.a)的打包
库是代码的集合,根据代码公开程度,分为开源库和闭源库. 其中闭源库主要包括静态库和动态库,是经过编译的二进制文件,看不到具体实现. 静态库的拓展名是.a或者.framework,动态库则是.dylib ...