原文地址:http://www.jb51.cc/article/p-zlltzegt-zw.html
自学使用
1.为什么会有retain?
C++和Java不一样,Java有一套很方便的垃圾回收机制,当我们不需要使用某个对象时,给它赋予null值即可。而C++new了一个对象之后,不使用的时候通常需要delete掉。
于是,Cocos2d-x就发明了一套内存管理机制(小若:发你妹纸。。。),其实红孩儿的博客很详细地解释了Cocos2d-x的内存管理机制,我没有能力也不想重复解释。(小若:那你还写?==)
Retain的意思是保持引用,也就是说,如果想保持某个对象的引用,避免它被Cocos2d-x释放,那就要调用对象的retain函数。(小若:为什么不retain就会被释放?)
2.真正的凶手autoRelease
既然旁白诚心诚意地问我,那我就光明正大地回答吧(小若:我今天没力气吐槽,好吧==)。
一旦调用对象的autoRelease函数,那么这个对象就被Cocos2d-x的内存管理机制给盯上了,如果这个对象没人认领,那就等着被释放吧。(小若:==太久没吐槽,一时不知道吐什么好)。
3.看代码实际点
说了这么多,还是上代码吧。
创建一个Cocox2d-x的项目,就直接拿HelloWorldScene开刀,修改init函数,在最后添加一句代码:
- boolHelloWorld::init()
- {
- boolbRet=false;
- do
- {
- /*很多代码被省略了。。。。。。*/
- testSprite=CCSprite::create("HelloWorld.png");
- bRet=true;
- }while(0);
- returnbRet;
- }
(小若:testSprite是什么东东?)
testSprite是一个成员变量,在头文件里加上就可以了: