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 = > ****!
时间: 2025-01-01 22:04:45

didLoadFromCCB方法的调用顺序的相关文章

Groovy探索之MOP 十二 方法的调用顺序

我们知道,除了使用hook来拦截方法以外,我们还可以通过各种方式来实现方法.如,我们可以在类里直接实现方法:我们可以通过ExpandoMetaClass在运行期内添加方法:我们还可以通过ExpandoMetaClass在运行期内单独给一个对象添加方法. 所有的这些直接添加方法的途径,如果存在hook的话,都是要被hook拦截的.所以,我们可以说,系统是优先调用hook的. 而hook的调用顺序,我们在上一篇<Groovy探索之MOP 十一 运行期内覆盖invokeMethod>已经谈到过了.

java基础-JAVA equals方法被调用时字符串和对象的顺序

问题描述 JAVA equals方法被调用时字符串和对象的顺序 如图所示 equals方法中对象在前还是字符串在前? 是标准还是建议? 解决方案 一般建议是字符串在前,这样能够避免当你的对象为[null] 的时候,报空指针异常. 解决方案二: 字符串在前,避免当你的对象为[null] 的时候,报空指针异常

构建器的调用顺序

构建器调用的顺序已在第4章进行了简要说明,但那是在继承和多形性问题引入之前说的话. 用于基础类的构建器肯定在一个衍生类的构建器中调用,而且逐渐向上链接,使每个基础类使用的构建器都能得到调用.之所以要这样做,是由于构建器负有一项特殊任务:检查对象是否得到了正确的构建.一个衍生类只能访问它自己的成员,不能访问基础类的成员(这些成员通常都具有private属性).只有基础类的构建器在初始化自己的元素时才知道正确的方法以及拥有适当的权限.所以,必须令所有构建器都得到调用,否则整个对象的构建就可能不正确.

debug-eclipse用java写web项目,操作页面时怎么证明哪些代码,哪些方法被调用执行了

问题描述 eclipse用java写web项目,操作页面时怎么证明哪些代码,哪些方法被调用执行了 跑web项目,在页面进行操作,怎么查明这个操作调用了哪些类的哪些方法以及执行顺序,本人不怎么会调试,能具体点最好,感激不尽 解决方案 楼主可能没有工作吧,其实这个问题稍微有个人简单一说就会了,从浏览器要学会使用开发者模式,例如firefox的debug模式,这个可以查看页面操作 后发送了哪些请求,然后得到了什么响应,请求就可以知道你调用了哪个Action,从而知道调用后台哪些方法,后台如果用ecli

Matrix的set,pre,post调用顺序详解

Matrix调用一系列set,pre,post方法时,可视为将这些方法插入到一个队列.当然,按照队列中从头至尾的顺序调用执行. 其中pre表示在队头插入一个方法,post表示在队尾插入一个方法.而set表示把当前队列清空,并且总是位于队列的最中间位置.当执行了一次set后:pre方法总是插入到set前部的队列的最前面,post方法总是插入到set后部的队列的最后面. 例一: Matrix m = new Matrix(); m.setRotate(45); m.setTranslate(80,

关于在同控制器中方法中调用没有权限的方法的提问

问题描述 关于在同控制器中方法中调用没有权限的方法的提问 Index 控制器中,我写了一个有权限的A方法,然后我又写了一个我没有权限B方法,当我在A方法中用 $this->B(); 时,居然在A方法中能够接收到 B中 return 出来的值 跪求解答 解决方案 YII 如何在控制器里调用 model 方法YII 如何在控制器里调用 model 方法

基类和子类的调用顺序(C#,java)

现在关于oo的编程思想已经越来越被大家接受,但是大家对一些基础化的东西不是很熟悉,比如基类和子类的调用顺序.在这里我以c#为例给大家讲解一下对于一个下面一段代码 public class baseClass { public string a="baseClass" ; public baseClass() { a="初始化baseClass"; } } public class ExtendClass:baseClass { private string b=&q

JAVA基础培训(2) 熟悉方法的调用

我们上一个只用直接的输出语句,打印出可Hello World 查看复制到剪切板打印 System.out.println("Hello World!"); 这里我们讲使用方法,来实现输出这个 Hello World的功能.我们先看代码. 查看复制到剪切板打印 // package 影响到你的类存储目录和访问方式 // 这个课程2,我们使用了lession2,对应的目录也是 // E:\javalession\base\src\lession2 package lession2; /**

c#方法中调用参数的值传递方式和引用传递方式以及ref与out的区别深入解析

以下是对c#方法中调用参数的值传递方式和引用传递方式,以及ref与out的区进行了详细的分析介绍,需要的朋友可以过来参考下   复制代码 代码如下: #define Test using System; namespace Wrox.ProCSharp.ParameterTestSample ...{  class ParemeterTest  ...{     static void TestInt(int[] ints,int i)     ...{         ints[0] = 10