ios retainn和release倒底怎么玩

cocos2d-x retain和release倒底怎么玩_百度知道
cocos2d-x retain和release倒底怎么玩
我有更好的答案
不使用的时候通常需要delete掉? C++和Java不一样,Java有一套很方便的垃圾回收机制,当我们不需要使用某个对象时,给它赋予null值即可。而C++new了一个对象之后1. 为什么会有retain。 于是
采纳率:94%
来自团队:
为您推荐:
其他类似问题
cocos2d-x的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Cocos2d-x retain和release倒底怎么玩?
时间: 16:35:34
&&&& 阅读:86
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&
呼呼,好久没有发布教程了(小若:难得清静了,你为毛又出来吓人=&=),其实最近木头我在准备出版书籍的事情。但是貌似不太顺利,果然我还是积累不够,写书的过程压力好大,感觉写不出有趣的文字出来(小若:嗷、、、)。果然还是在博客写自由一些?嘿嘿~
最近以及最不是很近(小若:书里一定不能出现这些错误的语句,所以你才写不出来吧
笨木头花心贡献,啥?花心?不呢,是用心~
转载请注明,原文地址:&
1.&为什么会有
Retain的意思是保持引用,也就是说,如果想保持某个对象的引用,避免它被
2.&真正的凶手
既然旁白诚心诚意地问我,那我就光明正大地回答吧(小若:我今天没力气吐槽,好吧
一旦调用对象的
3.&看代码实际点
说了这么多,还是上代码吧。
bool&HelloWorld::init()&&
&&&&bool&bRet&=&&&
&&&&&&&&testSprite&=&CCSprite::create("HelloWorld.png");&&
&&&&&&&&bRet&=&&&
&&&&}&while&(0);&&
&&&&return&bR&&
testSprite是一个成员变量,在头文件里加上就可以了:
class&HelloWorld&:&public&cocos2d::CCLayer&&
&&&&virtual&bool&init();&&&&
&&&&static&cocos2d::CCScene*&scene();&&
&&&&void&menuCloseCallback(CCObject*&pSender);&&
&&&&CREATE_FUNC(HelloWorld);&&
private:&&
&&&&cocos2d::CCSprite*&testS&&
然后,最关键的来了,我们修改
void&HelloWorld::menuCloseCallback(CCObject*&pSender)&&
&&&&testSprite-&getPosition();&&
现在,运行项目,点击按钮,看看是什么情况?
(小若:报错了!)
如果大家知道怎么调试项目的话,我们在
(小若:很正常啊,有什么特别的?)
正你妹纸啊,正!你才正!(小若:不要这么光明正大地赞我
我们应该能看到不少非正常数据,图中已经用红色圈圈标出来了,这代表
这是很危险的,有时候它不会立即报错,但是在某个时刻突然崩溃!
要想解决这个问题,很简单,再次修改
bool&HelloWorld::init()&&
&&&&bool&bRet&=&&&
&&&&&&&&testSprite&=&CCSprite::create("HelloWorld.png");&&
  testSprite-&retain();&&
&&&&&&&&bRet&=&&&
&&&&}&while&(0);&&
&&&&return&bR&&
再次运行项目,看看还会不会报错?(小若:不会了,为什么?)
再次用调试模式运行项目,看看
(小若:不正常!都是
这次我们看到
4.&原理来了
好了,唠叨了一大堆,还没有进入正题。
首先,要想让对象参与内存管理机制,必须继承
然后,调用对象的
如果不想让对象被杀死,那么就要调用对象的
但,对象一辈子都不被释放的话,那么就会产生内存泄露,你试试加载一个占
5.&实际情况
讲道理,大家都懂,但是,相信很多朋友在实际写代码的时候,还是会感觉很混乱。
比如,什么时候该
其实这很简单,因为我们经常会在
testSprite&=&CCSprite::create("HelloWorld.png");
this-&addChild(testSprite);
addChild函数就是导致大家混乱的凶手了,
于是,当我们把对象
6.&那倒底什么时候要
说了这么多,还是没有说清楚,什么时候要调用对象的
很简单,当你把一个对象作为成员变量时,并且没有把对象
7.&最后的最后
一定要记住,必须要调用了对象的
因此,十分建议使用
CCSprite*&CCSprite::create(const&char&*pszFileName)&&
&&&&CCSprite&*pobSprite&=&new&CCSprite();&&
&&&&if&(pobSprite&&&&pobSprite-&initWithFile(pszFileName))&&
&&&&&&&&pobSprite-&autorelease();&&
&&&&&&&&return&pobS&&
&&&&CC_SAFE_DELETE(pobSprite);&&
&&&&return&NULL;&&
这些就是retain表面上的知识了,至于retain源码级别的解说,请到红孩儿的博客吧,强烈推荐~
好了,不唠叨了
&标签:&&&&&&&&&&&&&&&&&&&&&&&&原文地址:http://www.cnblogs.com/lifesteven/p/3927225.html
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
比如我创建一个CGImageRef。用完了我要释放,免得内存升高,我应该用哪个?
CGImageRef imageRef = [asset.defaultRepresentation fullScreenImage];
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
release是计数器-1,,retain是+1
用完不需要的时候需要release
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
1)首先对照下你在使用CGImageRelease之前是否调用过CGImageCreate,CGImageCreateCopy 或者是CGImageRetain。。
2)如果没有会Crash吧。。。
资产类的话主动调这个对减少内存使用似乎没啥用。。。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
虽然现在有了ARC,还是需要了解一下MRC
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
如果你需要释放内存,当然调用CGImageRelease,CGImageRelease是让引用计数-1,当引用计数为0的时候,系统就会释放回收内存。与此相对应的是retain +1。虽然现在ARC用得比较多,内存管理这块楼主还是需要去了解学习下。
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 ios retain 的文章

 

随机推荐