zoukankan      html  css  js  c++  java
  • [转]cocos2dx学习之自动内存管理和常见宏

      1.自动内存管理

        1)概述

        C++语言默认是没有提供自动内存管理的。使用者需要自己分配,自己释放。在cocos2d-x里提供了一个自动内存管理的方案。主要是通过CCObject来提供的,用户只要继承了CCObject,就可以通过调用autorelease()来告诉系统进行自动内存管理。

        一般用法就是:    CCLayer* pLayer = CreateLayer(s_nActionIdx);    pLayer->autorelease();
      

        2)自动内存管理的实现

        自动内存管理的实现原理大概是:用户设置自动释放功能时,内存管理(CCPoolManager)会自动把这个CCObject对象加入其管理池中。等到一定时机(场景销毁,一帧渲染结束,程序退出等),内存管理会遍历其所管理的每一个对象,逐个调用CCObject的释放函数进行释放。CCObject自己内部设置一个引用系数,增加一个使用就系数加一,释放就系数减一,当系数为0时,才真正进行释放。

         如果研究下CCPoolManager,会发现进行真正内存管理的是自动释放池(CCAutoreleasePool),CCPoolManager下面包含有多个CCAutoreleasePool。CCAutoreleasePool提供了addObject,removeObject,clear功能。我开始很疑惑,因为进行内存释放管理,一个CCAutoreleasePool就够了。后来仔细考虑,发现了这个的秘密所在:

         CCPoolManager管理多个CCAutoreleasePool,是为了方便确定哪个自动释放池(CCAutoreleasePool)可以进行释放,而不用影响到其他的自动释放池。比如在关卡切换时,上一个关卡的自动释放池的数据就可以进行自动释放了,而新关卡的自动释放池不变~~ 好想法!

        2.常见宏

       1)NS_CC_BEGIN cocos2d命名空间开始

       2) NS_CC_END  cocos2d命名空间结束

       3)USING_NS_CC 声明cocos2d命名空间

       4)CC_SYNTHESIZE_READONLY(varType, varName, funName)声明一个成员变量以及getfunName函数,没有set函数。getfunName已经实现,其实现就是返回这个值。

       5)CC_SYNTHESIZE_READONLY_PASS_BY_REF(varType, varName, funName) 类似CC_SYNTHESIZE_READONLY,不过getfunName返回的是引用。

       6)CC_SYNTHESIZE(varType, varName, funName) 声明一个成员变量以及getfunName,setfunName函数.函数声明和实现都有

       7)CC_SYNTHESIZE_PASS_BY_REF(varType, varName, funName) 类似CC_SYNTHESIZE,不过getfunName返回的是引用。

       8)CC_PROPERTY_READONLY(varType, varName, funName) 声明一个成员变量以及getfunName函数,没有set函数。getfunName函数的实现要自己做

       9)CC_PROPERTY_READONLY_PASS_BY_REF(varType, varName, funName) 类似CC_PROPERTY_READONLY,不过getfunName返回的是引用。getfunName函数的实现要自己做

       10)CC_PROPERTY(varType, varName, funName) 声明一个成员变量以及getfunName,setfunName函数.函数实现要自己做

      11)CC_PROPERTY_PASS_BY_REF(varType, varName, funName) 类似CC_PROPERTY,,不过getfunName返回的是引用

  • 相关阅读:
    JS系列:三元运算符与循环
    浏览器解析js和type判断数据类型
    JS系列:数据类型详细讲解
    JS系列:编程语言
    京东校招面试汇总
    有关axios的request与response拦截
    正则表达式 判断内容是否为合法的url
    H5 小代码(实时更新)
    H5 回到顶部按钮
    图片压缩(js压缩,底部有vue压缩图片依赖使用的教程链接)
  • 原文地址:https://www.cnblogs.com/JD85/p/2760819.html
Copyright © 2011-2022 走看看