Addchild 之后 再次 retain 有什么作用?

创建了一个类的指针后,接着就对其addchild,而addchild里面,已经有一次retain操作了:static inline void ccArrayAppendObject(ccArray arr, CCObject object)
{
arr->arr = object; object->retain();
arr->num++;
}

接着又做一次retain是出于什么目的呢?
最近在弄libcurl,所以在看2.0工程里面test里面的curltest的代码,这段代码如下:

m_pLabel = CCLabelTTF::labelWithString("Touch the screen to connect", "Arial", 22);
m_pLabel->setPosition(ccp(s.width / 2, s.height / 2));
addChild(m_pLabel, 0);

m_pLabel->retain();

当然后面对象析构的时候,他release了一次。保件了对象的释放,但是我还是想问,这样额外retain一次是为什么?会不会是多余的?

— Begin quote from ____

xinjuese 发表于 2012-10-31 21:28 url

第一,上面的ccArrayAppendObject方法中retain()一次的目的是为了防止对象被回收了,所以每次加入到数组中 …

— End quote

恩,知道了。谢谢O(∩_∩)O~

第一,上面的ccArrayAppendObject方法中retain()一次的目的是为了防止对象被回收了,所以每次加入到数组中的时候,要额外retain()一次,然后数组消除时,他会逐个release掉数组中的对象。
第二,其实例子中的那种做法如果不retain()也是可以的,因为该对象从父节点中删除时会release()掉,所以如果你想像例子中那样手动retain()一次,那么你就要保件再自己手动realease()一次。我很少采用例子中的那种做法,因为我怕忘了release()。

第一,上面的ccArrayAppendObject方法中retain()一次的目的是为了防止对象被回收了,所以每次加入到数组中的时候,要额外retain()一次,然后数组消除时,他会逐个release掉数组中的对象。
第二,其实例子中的那种做法如果不retain()也是可以的,因为该对象从父节点中删除时会release()掉,所以如果你想像例子中那样手动retain()一次,那么你就要保件再自己手动realease()一次。我很少采用例子中的那种做法,因为我怕忘了release()。