COCOS学习笔记--Cocod2dx内存管理(三)-Coco2d-x内存运行原理

通过上两篇博客,我们对Cocos引用计数和Ref类、PoolManager类以及AutoreleasePool类已有所了解,那么接下来就通过举栗子来进一步看看Coco2d-x内存运行原理是怎样的。

 //先建一个node
Node * node = Node::create();
//创建完之后打印node的引用计数
schedule([node](float f){
//获得node的引用计数
int count = node->getReferenceCount();
//打印node的引用计数
log("node's ReferenceCount = %d",count);
},"test");

打印结果如下:


可以看到引用计数打印出来是一大串的整数,其实这时node已经被释放掉了是不存在的,引用计数为0,所以系统随便打印了一堆整数来表示。

我们先看一下Node类的源码,其create()方法如下:

Node * Node::create()
{
    Node * ret = new (std::nothrow) Node();
    if (ret && ret->init())
    {
        ret->autorelease();
    }
    else
    {
        CC_SAFE_DELETE(ret);
    }
    return ret;
}

看到这句Node * ret = new (std::nothrow) Node();首先new了一个node,我们知道Node是继承自Ref的,通过new创建对象就会调用其构造函数,而之前我们在Ref类的讲解中知道:调用Ref构造函数中会执行这句_referenceCount(1)对其引用计数+1,所以node对象起始的引用计数为1。

我们还可以看到这句:ret->autorelease(),只要通过create创建的node都会被添加到自动释放池中,我们在看下autorelease()源码:

Ref* Ref::autorelease()
{
    PoolManager:
  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值