cocos2d-x学习之自动内存管理和常见宏

cocos2d-x学习之自动内存管理和常见宏,第1张

概述1.自动内存管理     1)概述     C++语言默认是没有提供自动内存管理的。使用者需要自己分配,自己释放。在cocos2d-x里提供了一个自动内存管理的方案。主要是通过CCObject来提供的,用户只要继承了CCObject,就可以通过调用autorelease()来告诉系统进行自动内存管理。     一般用法就是:    CCLayer* pLayer = CreateLayer(s_n 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_ENDcocos2d命名空间结束

3)USING_NS_CC 声明cocos2d命名空间

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

5)CC_SYNTHESIZE_Readonly_PASS_BY_REF(varType,funname) 类似CC_SYNTHESIZE_Readonly,不过getfunname返回的是引用。

6)CC_SYNTHESIZE(varType,funname) 声明一个成员变量以及getfunname,setfunname函数.函数声明和实现都有

7)CC_SYNTHESIZE_PASS_BY_REF(varType,funname) 类似CC_SYNTHESIZE,不过getfunname返回的是引用。

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

9)CC_PROPERTY_Readonly_PASS_BY_REF(varType,funname) 类似CC_PROPERTY_Readonly,不过getfunname返回的是引用。getfunname函数的实现要自己

10)CC_PROPERTY(varType,funname) 声明一个成员变量以及getfunname,setfunname函数.函数实现要自己做

11)CC_PROPERTY_PASS_BY_REF(varType,funname) 类似CC_PROPERTY,,不过getfunname返回的是引用

总结

以上是内存溢出为你收集整理的cocos2d-x学习之自动内存管理和常见宏全部内容,希望文章能够帮你解决cocos2d-x学习之自动内存管理和常见宏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1075373.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存