cocos2dx addchild-cocos2dx中关于addChild()引用计数具体位置

问题描述

cocos2dx中关于addChild()引用计数具体位置

都说cocos2d中使用addChild()时引用计数加一,请问具体在哪儿?`void Node::addChild(Node *child, int zOrder, int tag)
{

CCASSERT( child != nullptr, "Argument must be non-nil");
CCASSERT( child->_parent == nullptr, "child already added. It can't be added again");

if (_children.empty())
{
    this->childrenAlloc();
}

this->insertChild(child, zOrder);

#if CC_USE_PHYSICS
if (child->getPhysicsBody() != nullptr)
{
child->getPhysicsBody()->setPosition(this->convertToWorldSpace(child->getPosition()));
}

for (Node* node = this->getParent(); node != nullptr; node = node->getParent())
{
    if (dynamic_cast<Scene*>(node) != nullptr)
    {
        (dynamic_cast<Scene*>(node))->addChildToPhysicsWorld(child);
        break;
    }
}

#endif

child->_tag = tag;

child->setParent(this);
child->setOrderOfArrival(s_globalOrderOfArrival++);

if( _running )
{
    child->onEnter();
    // prevent onEnterTransitionDidFinish to be called twice when a node is added in onEnter
    if (_isTransitionFinished) {
        child->onEnterTransitionDidFinish();
    }
}

if (_cascadeColorEnabled)
{
    updateCascadeColor();
}

if (_cascadeOpacityEnabled)
{
    updateCascadeOpacity();
}

}
`

解决方案

进入this->insertChild(child, zOrder);
再进入
_children.pushBack(child);
就可以看到了
void pushBack(T object)
{
CCASSERT(object != nullptr, "The object should not be nullptr");
_data.push_back( object );
//addChild的引用计数加一在这
object->retain();
}``

时间: 2024-08-31 14:33:23

cocos2dx addchild-cocos2dx中关于addChild()引用计数具体位置的相关文章

分布式Map中实现引用计数

前言 在<ReferenceCountSet无锁实现>中,详细介绍了如何在一个进程中实现一个无锁版本的ReferenceCountSet(或者说是在自己的代码里没有锁),但是最近遇到一个问题,如果是在分布式的环境中呢?如何实现这个引用计数?这个问题如果从头开始写,会是一个比较复杂的问题,在实际中,我们可以使用ZooKeeper设置时的version机制来实现,即CAS(Compare-And-Set).这是一个本人在实际项目中遇到的一个问题,但是会更简单一些,因为在我们的项目中,我们使用Gem

Objective-C中的引用计数

 导言 Objective-C语言使用引用计数来管理内存,也就是说,每个对象都有个可以递增或递减的计数器.如果想使某个对象继续存活,那就递增其引用计数:用完了之后,就递减其计数.计数为0,就表示没人关注此对象了,于是,就可以把它销毁. 从Mac OS X 10.8开始,"垃圾收集器"(garbage collector)已经正式废弃了,以Objective-C代码编写Mac OS X程序时不应再使用它,而iOS则从未支持过垃圾收集.因此,掌握引用计数机制对于学好Objective-C来

关于Cocos2dx 3.1中给Button增加一个touch事件监听的时候运行出错的问题

问题描述 关于Cocos2dx 3.1中给Button增加一个touch事件监听的时候运行出错的问题 Button *login = (Button *)widget->getChildByName("login"); login->addTouchEventListener(CC_CALLBACK_1(RegisterUI::OnClick, this)); 编译能过 但是运行的时候运行到 addTouchEventListener的时候就出错了 报错信息 0x0F6C3

Cocos2d-x 3.0中集成社交分享ShareSDK的详细步骤和常见问题解决_Android

给自己的手机游戏增加些社交分享功能,有助于游戏宣传和提升知名度,是一种不错的社交营销手段.国内这方面的第三方插件有不少,比如ShareSDK.友 盟分享组件.Baidu分享组件等,之前在研究2.2.2版本时,集成了ShareSDK这个组件,这次迁移到Cocos2d-x 3.0rc2依旧选择集成ShareSDK,这里就来说说集成的过程,遇到的一些问题以及解决方法.这里仅以Android平台游戏集成为例. 一.功能描述.SDK版本和帐号准备 功能大致是这样的:在游戏中设置一个按钮,点击这个按钮,弹出

在VB.Net(1.0版本)中,如何实现类似COM的引用计数功能?

问题描述 各位大虾:我想在VB.NET(1.0)中设计一个类:clsObjA,该类定义了一个整型全局变量:Number.我希望在程序中增加该类实例的引用时,该Number加1.当该引用=nothing时,该Number减1.设计代码如下:dimmObjA=newclsObjAdimmojbBasclsObjAmObjB=mObjA'我希望Number=Number+1mObjB=nothing'我希望Number=Number-1请问:如何设计该类呢?谢谢 解决方案 解决方案二:没写过,不过感觉

Swift编程中用以管理内存的自动引用计数详解_Swift

Swift 内存管理功能是通过使用自动引用计数(ARC)来处理.ARC用于初始化和取消初始化所述系统资源,从而释放使用的类实例的存储器空间当实例不再需要.ARC跟踪代码的实例有效地管理存储资源之间的关系的信息. ARC的功能 在每一次一个新的类实例被创建时ARC分配一块内存以存储信息 init() 关于实例类型和其值的信息存储在存储器中 当类实例不再需要它自动由 deinit() 释放,用于进一步类实例的存储和检索的存储空间 ARC保存在磁道当前参照类实例的属性,常量和变量,使得 deinit(

实例讲解Swift中引用类型的ARC自动引用计数_Swift

一.引言 ARC(自动引用计数)是Objective-C和Swift中用于解决内存管理问题的方案.在学习Objective-C编程时经常会学习到一个关于ARC的例子:在一个公用的图书馆中,每次进入一人就将卡插入,走的时候将自己的卡拔出拿走.图书馆系统会判定只要有卡插入,就将图书馆的灯打开,当所有卡都被取走后,将图书馆的灯关掉.这个例子对应于Objective-C中的对象声明周期管理十分贴切.每当一个对象增加一个引用时,其引用计数会加1,当一个引用被取消时,对象的引用计数减1,当引用计数减为0时,

Cocos2d-x 3.0中集成社交分享ShareSDK的详细步骤和常见问题解决

给自己的手机游戏增加些社交分享功能,有助于游戏宣传和提升知名度,是一种不错的社交营销手段.国内这方面的第三方插件有不少,比如ShareSDK.友 盟分享组件.Baidu分享组件等,之前在研究2.2.2版本时,集成了ShareSDK这个组件,这次迁移到Cocos2d-x 3.0rc2依旧选择集成ShareSDK,这里就来说说集成的过程,遇到的一些问题以及解决方法.这里仅以Android平台游戏集成为例. 一.功能描述.SDK版本和帐号准备 功能大致是这样的:在游戏中设置一个按钮,点击这个按钮,弹出

php引用计数与变量引用

每个php5.5变量都存储在一个叫做zval的变量容器中.   一个zval变量容器,除了包含变量的类型与值外,还包含两个字节的额外信息:   1.第一个是"is_ref",是个bool型,用来标识这个变量是否属于引用集合(reference set),若属于则其值为1,否则为0.   有个这个变量php引擎就能够将普通变量与引用变量区分开来.   2.第二个是"refcount",用来表示指向这个zval变量(符号)的个数.每个符号都有作用域(scope),那些主