第一次使用CCARRAY_FOREACH遍历一个CCArray数组并且删除数组里的东西时发生出乎意料的结果:
类似代码如下:
CCArray *children = this->getChildren();
CCObject *temp = NULL;
CCARRAY_FOREACH(children, temp)
{
CCSprite *sprite = dynamic_cast<CCSprite*>(temp);
if(sprite->getTag() == 1)
{
this->removeChild(sprite);
}
}
这段代码执行下来,发现有些Tag为1的精灵没有被删除,为了查原因,我追查到CCARRAY_FOREACH宏的定义中:
#define CCARRAY_FOREACH(__array__, __object__) \
if ((__array__) && (__array__)->data->num > 0) \
for(CCObject** __arr__ = (__array__)->data->arr, **__end__ = (__array__)->data->arr