cocos2d-x-3.5 中new 出来的对象大部分是如何处理的
来源:互联网 发布:dnf决战人工智能 编辑:程序博客网 时间:2024/06/10 02:23
以下来自对 cocos2d-x-3.5 的源码分析, 今天重点研究它的动态开辟的对象释放问题.
涉及以下3个基本的class
和一个模板类
手动引用计数类
class Ref
Ref
是 cocos2d 中很大一部分类的祖先类 .Ref
支持以下三个接口:retain()
累加引用计数 , 当我们将指针复制给新的指针的时候, 请自觉手动调用!release()
指针释放无用或者即将挪作它用之前,自己自觉手动调用!autorelease()
将释放的任务交给当前的AutoreleasePool
, 这样程序员就不需要在意这个指针什么时候被释放或者挪作它用了.
Ref
对象池AutoreleasePool
- 任何一个
AutoreleasePool
对象构造的时候就会被压栈到下面的PoolManager
中, 析构的时候自动退栈 . AutoreleasePool
会在clear
或者析构的时候将自己管理的Ref
自动release()
一下.AutoreleasePool
支持:- 添加
void addObject(Ref *object)
- 查询
bool contains(Ref* object) const
- 清除
void clear()
- 添加
- 任何一个
对象池管理员
PoolManager
PoolManager
是单例的 !static PoolManager* getInstance()
- 池子只能有压栈和退栈两个操作.
void push(AutoreleasePool *pool);
void pop();
- 构造单例时候会自动构造一个
AutoreleasePool
作为当前使用的池子. - 总是使用栈顶的池子.
模板类
RefPtr
模拟shared_ptr
- 支持
swap()
- 自行测试NULL
- 自动累加/累减计数
- 可以相互赋值
- 支持
get()
接口获取原始指针* , ->
运算符
- 支持
另外还有一个相关的class : class Clonable
.
* 支持接口 Clonable* clone()
, 会复制Ref
, 重新开始计数.
可以看到 cocos2d-x 提供了基本的管理机制 ,但是需要依赖程序员的自觉性!!!
基于Ref的继承体系速查
Ref
Director
DisplayLinkDirector
EventListener
EventListenerAcceleration
EventListenerController
EventListenerCustom
EventListenerFocus
EventListenerKeyboard
EventListenerMouse
EventListenerTouchOneByOne
Event
EventDispatcher
EventController
EventFocus
EventCustom
EventKeyboard
EventMouse
EventTouch
Scheduler
ScriptHandlerEntry
Touch
ActionManager
Action
:Cloneable
FiniteTimeAction
ActionInstant
StopGrid
ActionInterval
GridAction
Grid3DAction
TiledGrid3DAction
AccelDeccelAmplitude
AccelAmplitude
DeccelAmplitude
ActionEase
EaseBackIn
EaseBackInOut
EaseBackOut
EaseBezierAction
EaseBounce
EaseBounceIn
EaseBounceInOut
EaseCircleActionIn
EaseCircleActionInOut
EaseCircleActionOut
EaseCubicActionIn
EaseCubicActionInOut
Animate
BezierBy
BezierTo
Blink
FadeTo
FadeIn
FadeOut
JumpBy
JumpTo
MoveBy
MoveTo
Repeat
RepeatForever
ReverseTime
RotateBy
RotateTo
ScaleTo
ScaleBy
TintBy
TintTo
TargetedAction
ProgressFromTo
ProgressTo
ActionTween
Sequence
SkewTo
SkewBy
Spawn
Follow
Speed
ActionCamera
OrbitCamera
PointArray
AnimationFrame : Cloneable
Animation : Cloneable
AnimationCache
Node
Camera
BaseLight
AmbientLight
DirectionLight
PointLight
SpotLight
AtlasNode
LabelAtlas
:LabelProtocol
TileMapAtlas
ClippingNode
ClippingRectangleNode
DrawNode
TMXLayer
TMXTiledMap
LabelTTF
:LabelProtocol
,BlendProtocol
LabelBMFont
:LabelProtocol
,BlendProtocol
Layer
LayerMultiplex
LayerColor
:BlendProtocol
LayerGradient
Menu
MenuItem
ImageView
MenuItemSprite
MenuItemToggle
MenuItemLabel
MenuItemAtlasFont
MenuItemFont
MenuItemFont
MotionStreak
:TextureProtocol
NodeGrid
RenderTexture
ParallaxNode
ProtectedNode
Widget
:LayoutParameterProtocol
Button
CheckBox
LoadingBar
Slider
Text
TextAtlas
TextBMFont
VideoPlayer
WebView
Layout
:LayoutProtocol
RelativeBox
PageView
HBox
VBox
ScrollView
ListView
ParticleBatchNode
:TextureProtocol
ParticleSystem
:TextureProtocol
ParticleSystemQuad
ParticleExplosion
ParticleMeteor
ParticleFire
ParticleFireworks
ParticleFlower
ParticleGalaxy
ParticleRain
ParticleSmoke
ParticleSnow
ParticleSpiral
ParticleSun
Scene
TransitionScene
TransitionCrossFade
TransitionFade
TransitionJumpZoom
TransitionShrinkGrow
:TransitionEaseScene
TransitionMoveInL
:TransitionEaseScene
TransitionMoveInB
TransitionMoveInR
TransitionMoveInT
TransitionSceneOriented
TransitionFlipAngular
TransitionFlipX
TransitionFlipY
TransitionZoomFlipX
TransitionZoomFlipY
TransitionFadeTR
:TransitionEaseScene
TransitionFadeDown
TransitionFadeUp
TransitionSlideInL
:TransitionEaseScene
TransitionSlideInR
TransitionSlideInT
TransitionSplitCols
:TransitionEaseScene
TransitionSplitRows
TransitionTurnOffTiles
TransitionPageTurn
TransitionProgress
Sprite
:TextureProtocol
SpriteBatchNode
:TextureProtocol
TMXLayer
TMXTiledMap
Component
FontCharMap
FontFNT
FontFreeType
LayoutComponent
FontAtlas
Grabber
GridBase
Grid3D
TiledGrid3D
SpriteFrame
:Clonable
SpriteFrameCache
TMXObjectGroup
TMXLayerInfo
LayoutManager
RichElement
GLView
0 0
- cocos2d-x-3.5 中new 出来的对象大部分是如何处理的
- linux 中大部分命令是如何工作的
- TDD Tip:方法内部New出来的对象如何Mock
- cocos2d-x 是如何渲染的
- PHP中new出来的对象和 clone复制出来的对象
- 如何delete vector中new出来的内存
- new出来的对象一定要delete
- cocos2d-x的lua脚本如何获得Cocostudio中UI控件的对象
- cocos2d-x的lua脚本如何获得Cocostudio中UI控件的对象
- [Cocos2d-x 2.3]Touch操作事件是如何分发的
- Cocos2d-x 程序是如何开始运行与结束的
- Cocos2d-X 程序是如何开始运行与结束的
- Cocos2d-x 程序是如何开始运行与结束的
- Cocos2d-x 程序是如何开始运行与结束的
- Cocos2d-x 程序是如何开始运行与结束的
- Cocos2d-x 程序是如何开始运行与结束的
- Cocos2d-x 程序是如何开始运行与结束的
- Cocos2d-x 程序是如何开始运行与结束的
- VS2013配置OpenCV,详细图文
- java实现选择排序、冒泡排序、插入排序
- ssh 无密码登陆 大坑
- JSON解析实例——使用Json-lib
- 使用truss、strace或ltrace诊断软件的"疑难杂症"
- cocos2d-x-3.5 中new 出来的对象大部分是如何处理的
- android4.4以上调用图库的方法
- 好玩的Linux命令
- 单词数 HDU 2072
- Android 序列化对象Parcelable 的使用
- HDU 1503--Advanced Fruits【LCS】
- 黑马程序员——基础学习
- sun.misc.unsafe类的使用
- iOS之同步请求、异步请求、GET请求、POST请求