cocos2dx 之内存管理(2)
来源:未知 责任编辑:责任编辑 发表时间:2014-01-20 07:51 点击:次
通过以上代码我们可以看出cocos2dx的内存管理机制和objective-c的管理一样。都是当_reference = 0时释放内存。_autoReleaseCount自动释放池的引用计数
auto sprite1 = new Sprite(); sprite1->initWithSpriteFrameName("btn_adventure_normal_CN.png");//引用计数器+1 CCLOG("retaincount = %d",sprite1->retainCount()); sprite1->retain();//引用计数器+1 CCLOG("retaincount = %d",sprite1->retainCount()); sprite1->release();//引用计数器-1 CCLOG("retaincount = %d",sprite1->retainCount()); sprite1->autorelease();//只是把该sprite放入自动释放池中。引用计数器不变。等待管理器自动释放 CCLOG("retaincount = %d",sprite1->retainCount());
coco2dx 内存管理原则
1.程序段必须成对执行retain()和release()或者执行autorelease()来开始和结束对对象的引用 2.工厂方法返回前,应通过autorelease()结束对该对象的引用 3.对象传值时,应考虑到新旧对象相同的特殊情况 4.尽量使用release()而不是autorelease()来释放对象,以确保性能。 5.保存ccobject的子类对象时,应严格使用cocos2dx提供的容器。内存管理涉及到的宏:
#define CC_SYNTHESIZE_RETAIN(varType, varName, funName) \ private: varType varName; \ public: virtual varType get##funName(void) const { return varName; } \ public: virtual void set##funName(varType var) \ { \ if (varName != var) \ { \ CC_SAFE_RETAIN(var); \ CC_SAFE_RELEASE(varName); \ varName = var; \ } \ } #define CC_SAFE_DELETE(p) do { delete (p); (p) = nullptr; } while(0) #define CC_SAFE_DELETE_ARRAY(p) do { if(p) { delete[] (p); (p) = nullptr; } } while(0) #define CC_SAFE_FREE(p) do { if(p) { free(p); (p) = nullptr; } } while(0) #define CC_SAFE_RELEASE(p) do { if(p) { (p)->release(); } } while(0) #define CC_SAFE_RELEASE_NULL(p) do { if(p) { (p)->release(); (p) = nullptr; } } while(0) #define CC_SAFE_RETAIN(p) do { if(p) { (p)->retain(); } } while(0)
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>