求教3.0中__Array 初始化的一个内存问题

读版主的飞机大战代码
发现一个问题
.h
__Array m_pAllEnemy1;
.cpp
m_pAllEnemy1 = __Array::create();
m_pAllEnemy1->retain();

这个地方有点不明白,为什么一定要retain一下

__Array* __Array::create()
{
    __Array* array = new __Array();

    if (array && array->initWithCapacity(7))
    {
        array->autorelease();
    }
    else
    {
        CC_SAFE_DELETE(array);
    }

    return array;
}


```


create方法 调用了autorelease方法 

我看其他的代码
比如我继承Sprite的时候,同样用create方法创建一个精灵对象的时候,却没有调用retain()方法,这个地方不懂为什么,求教指点

EnemyLayer::EnemyLayer()
{
CCLOG(“EnemyLayer() called”);
frame1 = nullptr;
enemy1List = __Array::create();
//enemy1List->retain();
}
array是在构造函数中create的
如果不加retain方法,在layer中其他方法中调用这个enemy1List就报错了

— Begin quote from ____

引用第1楼huazi221于2014-06-09 21:28发表的 :
EnemyLayer::EnemyLayer()
{
CCLOG(“EnemyLayer() called”);
frame1 = nullptr;
enemy1List = __Array::create();
http://www.cocoachina.com/bbs/job.php?action=topost&tid=205426&pid=973887

— End quote

我好像懂了
在构造函数中create的时候refcount =1
然后加入回收池
这个时候没有其他类来调用这个array 所以当池子回收的时候refcount 就等于0了,再次调用这个array 肯定就出问题了,不知道理解的对不对
我参考了http://www.cocoachina.com/bbs/read.php?tid=195219 这篇文章