Cocos2D中Node的userObject实例变量使用时一个要注意的地方

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.

如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)



我们知道在Cocos2D中,CCNode对象有一个ivar为userObject,它可以用来很方便的存储一些和该对象相关的数据,这样你就没必要费劲的去写子类继承了.

但是要注意的是,如果你的node添加到一个节点当做子类,比如:

[someBaba addChild:myNode];

那么在调用如下一句将myNode从父节点中删除时,其中的userObject也会被清除:

[myNode removeFromParent];

//some code use myNode.userObject, ERROR!!!
//myNode.userObject now is nil!!!

如上所示,在将自身从父节点中删除后,虽然myNode本身还未被删除(因为我在其他地方仍然有其引用),但它的userObject内容已经为nil了.

所以你可能原意是在从父节点删除之后再使用它,这时你可以这样做:

id tmpObj = myNode.userObject;
[myNode removeFromParent];
//that‘s ok to use tmpObj now :)
时间: 2024-08-26 01:20:41

Cocos2D中Node的userObject实例变量使用时一个要注意的地方的相关文章

Java中的类变量、实例变量、类方法、实例方法的区别

类变量:形如static int a; 顾名思义,类变量可以理解为类的变量,类变量在类加载的时候就已经给它分配了内存空间,不同于实例变量(int a; ),实例变量是在该类创建对象的时候分配内存的.并且,每创建一个对象,就会为该实例变量分配相应的内存空间,而类变量它不属于任何一个对象,它为所有对象所共享,所有对象的类变量占用相同的一处内存空间.调用类变量过程中,可以用 类名.类变量 也可以 对象名.类变量 来调用.类变量同于C/C++中接触的static变量,有记忆功能. 类方法:static 

python中的类变量、实例变量

类变量,是各个实例共享的资源,就像中央空调,只有一个,但每个房间(实例)均可享用. 实例变量,是每个实例各自分配使用的变量,每个房间(实例)都有一台空调,供自己使用. class handle(object): instance_num = 100 id = 0 def __init__(self, id): self.id = id handle.instance_num = handle.instance_num - 1 if __name__ == '__main__': print ha

time.h文件中包含的几个函数使用时须注意事项

time.h头文件中包含以下函数 char* asctime(const struct tm *tm); char* asctime_r(const struct tm *tm,char *buf); char* ctime(const time_t *timep); char* ctime_r(const time_t *timep,char *buf); struct tm *gmtime(const time_t *timep); struct tm *gmtime_r(const tim

【debug】vs2013中定义的全局变量count在使用时提示:“不明确的符号”

今天用vs2013编写程序时遇到以下这么一个bug 提示错误信息:count:不明确的符号,,count明明定义为全局变量,怎么成为不明确的符号了呢??百思不得其解 查阅资料找到了答案:命名空间std有一个count函数 编译器不知道调用的是:std::count(),还是用户定义的全局变量count,故报错 解决办法,在count前面加上作用域标识符:::count即可 如果同时要用到std中的count函数,加上命名空间和作用标识符即可:std::count() 版权声明:本文为博主原创文章

JS中,for和while在使用时的区别。

for用于可预测循环次数的情况,而while可在不确定循环次数时使用, while甚至可以不在循环指令上指定跳出循环的条件. so,正常使用的时候,应该优先考虑for循环,一般情况下for循环的效率都是最高的.

字符串和数组使用时该注意的一些地方

String 类型的初始化的三种常见手法: 1.使用new 关键字的话,就可以直接在构造函数中传入String类型的参数,例如:String name = new String("Name"): 2.也还可以以char[]类型的参数对构造函数的形参赋值,例如:char[] te = {'a','a','b'};String s = new String(ch); 3.也还可以使用byte[]数组 实现String构造函数的初始化,其中byte的类型就是以一个一个字节数据类型的大小范围内

iOS中的成员变量,实例变量,属性变量

在ios第一版中: 我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: 注意:(这个是以前的用法) @interface MyViewController :UIViewController { UIButton *myButton; } @property (nonatomic, retain) UIButton *myButton; @end 在现在iOS版本中: 苹果将默认编译器从GCC转换为LLVM(low leve

Java中静态变量(类变量)、实例变量、局部变量和成员变量

导读 学习Java的过程中,一开始很容易被这些各种变量绕晕,这篇博客主要介绍了这几种变量之间的关系和区别. 例程 package com.cunyu.demo public class Demo { private String name; //成员变量.实例变量 private int age; //成员变量.实例变量 private int ID; //成员变量.实例变量 public static final String school = "卡塞尔学院"; //成员变量.静态变

Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量

Objective-C语言介绍 . Objc与C语言 . 面向对象编程 . 类和对象 . 属性和方法 . 属性和实例变量 1 第一个OC控制台程序 1.1 问题 Xcode是苹果公司向开发人员提供的集成开发环境(非开源),用于开发Mac OS X,iOS的应用程序.其运行于苹果公司的Mac操作系统下. 本案例要求使用集成开发工具Xcode编写OC的HelloWorld程序,在Xcode的控制台中, 1.2 方案 首先,启动集成开发工具Xcode. 然后,创建OC语言的工程. 最后,运行所创建的工