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方法,执行初始化操作. ...
随机推荐
- Java使用BigDecimal保留double、float运算精度、保留指定位数有效数字、四舍五入
工具类 package --; import java.math.BigDecimal; /** * Created by kongqw on 2015/12/10. */ public final ...
- 有N个数,组成的字符串,如012345,求出字串和取MOD3==0的子串,如012 12 123 45。
#include <iostream> using namespace std; int getSum(string str, int begin, int len) { int sum ...
- 与markdown的第一次接触
什么是markdown markdown是一种比html轻量级的标记语言. markdown的介绍与学习请参考:markdown认识与入门 CSDN Markdown博客视频教程 知乎: 怎样引导新手 ...
- Android中常用开发工具类—持续更新...
一.自定义ActionBar public class ActionBarTool { public static void setActionBarLayout(Activity act,Conte ...
- 1079. Total Sales of Supply Chain (25) -记录层的BFS改进
题目如下: A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyon ...
- IDEA阅读Spark源码
将spark编译成idea-sbt工程 tar -zxvf spark-1.1.0.tgz cd spark-1.1.0 sbt/sbt gen-idea 等待-- 成功后就能以SBT工程的形式导入i ...
- 线程在Linux中的实现
早在以前,我们就知道,CPU调度的基本单位是线程,而进程是拥有资源的基本单位,进程是用进程描述符表示的,那么线程是怎么实现和表示的呢? 线程机制是现代编程技术中常用的一种抽象概 ...
- 3. React 组件生命周期介绍
React 中的每个组件都有三个阶段,这三个阶段构成了组件完整的生命周期.组件的生命周期为]); return; } this.setState({name: event.target ...
- love~LBJ,奥布莱恩神杯3
时间:2016年6月20日8:00:地点:美国金州甲骨文(Oracle)球馆:事件:G7大战,又一次见证伟大赛季奥布莱恩神杯得主--金州勇士VS克利夫兰骑士...... 可以说,这是NBA以来 ...
- Oracle采购模块中的多组织访问控制(MOAC)
1. 概述 从Release12开始启用多组织访问控制功能,将允许用户在一个单独的职责中访问一个或者多个经营单位(OU-Operation Units)的数据.这个功能允许用户在一个可共享服务的 ...