retain和@H_301_5@release倒底怎么玩?
呼呼,好久没有发布教程了(小若:难得清静了,你为毛又出来吓人==),其实最近木头我在准备出版书籍的事情。但是貌似不太顺利,果然我还是积累不够,写书的过程压力好大,感觉写不出有趣的文字出来(小若:嗷、、、)。果然还是在博客写自由一些?嘿嘿~
最近以及最不是很近(小若:书里一定不能出现这些错误的语句,所以你才写不出来吧@H_301_5@==),不少朋友对@H_301_5@retain的认识似乎有点模糊,今天我就和大家分享一下关于@H_301_5@retain的知识吧@H_301_5@~
笨木头花心贡献,啥?花心?不呢,是用心~
转载请注明,原文地址:http://www.jb51.cc/article/p-zlltzegt-zw.html
正文:
@H_301_5@
1.为什么会有@H_301_5@retain?
C++和@H_301_5@Java不一样,@H_301_5@Java有一套很方便的垃圾回收机制,当我们不需要使用某个对象时,给它赋予@H_301_5@null值即可。而@H_301_5@C++new了一个对象之后,不使用的时候通常需要@H_301_5@delete掉。
于是,@H_301_5@Cocos2d-x就发明了一套内存管理机制(小若:发你妹纸。。。),其实红孩儿的博客很详细地解释了@H_301_5@Cocos2d-x的内存管理机制,我没有能力也不想重复解释。(小若:那你还写?@H_301_5@==)
Retain的意思是保持引用,也就是说,如果想保持某个对象的引用,避免它被@H_301_5@Cocos2d-x释放,那就要调用对象的@H_301_5@retain函数。(小若:为什么不@H_301_5@retain就会被释放?)
2.真正的凶手@H_301_5@autoRelease
既然旁白诚心诚意地问我,那我就光明正大地回答吧(小若:我今天没力气吐槽,好吧@H_301_5@==)。
一旦调用对象的@H_301_5@autoRelease函数,那么这个对象就被@H_301_5@Cocos2d-x的内存管理机制给盯上了,如果这个对象没人认领,那就等着被释放吧。(小若:@H_301_5@==太久没吐槽,一时不知道吐什么好)。
3.看代码实际点
说了这么多,还是上代码吧。
创建一个@H_301_5@Cocox2d-x的项目,就直接拿@H_301_5@HelloWorldScene开刀,修改@H_301_5@init函数,在最后添加一句代码:
- boolHelloWorld::init()
- {
- boolbRet=false;
- do
- {
- /*很多代码被省略了。。。。。。*/
- testSprite=CCSprite::create("HelloWorld.png");
- bRet=true;
- }while(0);
- returnbRet;
- }
(小若:@H_301_5@testSprite是什么东东?)
testSprite是一个成员变量,在头文件里加上就可以了: