retain的意思就是保持引用,避免被cocos2d-x釋放。與之對應的就是release(). 和c++中的new(),delete()有點類似。
不過在coscos中由於autorelease的存在,問題變得更加複雜。
autorelease
對象調用autorelease,對象就會被cocos2d-x的內存管理機制標記,在遊戲的每一幀,內存管理機制都要掃描被標記的對象,如果引用計數爲零,就將對象銷燬。
如果不想被銷燬,就調用retain函數,當然要注意在析構函數中調用release函數。
什麼時候調用retain
當create()一個對象的時候,在添加到層裏
testSprite = CCSprite::create("helloworld.png");
this->addChild(testSprite);
addchild()會調用retain()函數。
當你把一個對象當成成員變量時,並且沒有把對象addchild到另一對象,就需要調用retain函數。
附上cocos的內存管理文章http://www.cnblogs.com/sniperHW/p/3789837.html