首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该使用CCArray在cocos2d-x中保存自定义CCNode吗?

我应该使用CCArray在cocos2d-x中保存自定义CCNode吗?
EN

Stack Overflow用户
提问于 2014-03-27 07:39:58
回答 1查看 510关注 0票数 0

我最近遇到了一个问题。我在cocos2d-x中经常使用vector STL。在我的一堂课上,我写道:

代码语言:javascript
运行
复制
vector<StrokeDrawnode*> strokedrawList;

StrokeDrawnode是从CCNode继承的。然而,我读到一些文章说,最好使用CCArray来保存CCObject的子类。实际上,我对内存管理有问题。我想这就是问题所在。因此,我的问题是,我应该在什么情况下使用CCArray,以及如何处理内存管理。

在什么情况下,我应该这样定义类成员?

代码语言:javascript
运行
复制
CC_SYNTHESIZE_RETAIN(CCSprite* , m_sprite_draw, Sprite);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-27 09:59:26

在本例中,std::vectorCCArray的主要区别是,当您向CCArray添加对象时,它们会被保留。这在cocos中非常重要,因为CCObject-dervied (基本上所有)对象在其retainCount达到0时就会被销毁。这是在每个帧之间自动完成的。

考虑这个例子:假设您想要创建5个精灵并缓存它们供以后使用(它们直到将来的某个时候才会出现在屏幕上)。代码(在init()方法中的某个地方):

代码语言:javascript
运行
复制
for(int i = 0; i < 5; ++i) {

   CCSprite *vectorSprite = (...);
   CCSprite *arraySprite = (...);

   _vector.push_back(vectorSprite);
   _array->addObject(arraySprite);

}

_array->retain(); // < ------- IMPORTANT!

// end of init method 

当然,我们假设_vector_array是实例变量,在init()结束时不会被销毁。

在绘制下一个帧之前发生的事情是,我们放入_vector中的所有精灵都将被销毁--向量将保存指向无效内存位置的指针。

我们在_array中放置的对象不会,因为addObject为我们保留了它们。注意,_array本身也必须保留,否则它将被销毁(我不确定它的内容)。

通常,我认为在处理cocos对象时使用cocos-containers可能更好,因为您只需要记住保留容器本身,而不是所有对象。如果您真的想使用std::vector,那么可以使用子类std::vector,这样它的push_backpop_back方法将分别用于retainrealese对象。

至于宏-我从未使用过它,但它扩展到:

代码语言:javascript
运行
复制
#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; \
    } \
} 

它为外部使用的变量创建了一个setter和一个getter。在我看来,只有当您想要将一个变量公开给外部使用并自动提供此方法时,它才是可行的。这里的附加值当然是在setter中完成的retain - release过程。

如果有什么不清楚的话请告诉我!干杯。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22681078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档