Cocos2d-x是如何进行内存管理的?
目前主要有两种方式实现智能管理的技术,一种是引用计数,一种是垃圾回收。而Cocos2d-x采用的就是引用计数方式,为此实现了自己的根类(Ref),每一个对象都包含了一个对生命周期控制的引用计数器,构造函数创建时会对该引用计数器赋值为1,这代表没有实际引用。当要引用对象时,调用retain方法,之后引用计数加1;当引用结束时,调用release方法,引用计数减1。而autorelease方法会将对象放入一个自动释放池,实现灵活的垃圾回收。当每一帧结束的时候,自动释放池的对象就会执行一次release。Create方法将对象加入内存池之后,对象的所有权都属于内存池了,我们返回的指针并没有所有权。而主循环干了一件非常重要的事情:弹出最上层的自动释放池。之后在release全部此内存池中的对象。就是这样的原理,我们可以放心的将对象放入autorelease的池中,在需要的时候,该对象就能智能的释放,同时,在上一级父节点通过addchild向对象获得所有权之后,就能保证该对象不会被删除。
Cocos2d-x中所使用的设计模式
导演类或者图集缓存类,都使用了单例模式,在全局环境下,他们都只有一个实例。而通知中心,则使用了观察者模式,如果一个类对某个消息感兴趣,只需要在通知中心中订阅即可。而Action则使用了装饰者模式,某些动作之间进行了填充的封装
网友评论