Cocos2dx学习笔记(1) Ref类型数据 垃圾回收机制

Cocos2dx学习笔记(1) Ref类型数据 垃圾回收机制,第1张

概述1、不调用autorelease()的情况         TestVO* vo = new TestVO();        //未调用create()方法创建,没有执行过autorelease()        vo->init();        //这种情况下局部变量无法被回收        vo->release();        //需要手动调用release()方法  

1、不调用autorelease()的情况

TestVO*vo=newTestVO();//未调用create()方法创建,没有执行过autorelease()vo->init();//这种情况下局部变量无法被回收vo->release();//需要手动调用release()方法//CC_SAFE_DELETE(vo);//也可以用这种方法删除


2、调用autorelease()的情况

TestVO*vo=TestVO::create();//引用计数=1//create()方法中执行过autorelease()//引用计数设为1//在帧结束的时候引用计数-1//引用计数为0时被回收


3、手动调用retain()防止被删除

TestVO*vo=TestVO::create();//引用计数=1vo->retain();//引用计数=2//......//帧结束引用计数-1值为1不回收//......//下一帧开始时引用计数+1值为2//......//调用release()方法vo->release();//引用计数-1//......//帧结束引用计数-1值为0被回收


4、被添加到cocos2d的数据结构时

TestVO*vo=TestVO::create();//引用计数=1mList->pushBack(vo);//引用计数=2mList->popBack();//引用计数=1能被回收Vector<TestVO*>*mList2=newVector<TestVO*>();mList2->pushBack(vo);//引用计数=2无法被回收//如果mList2是局部变量,其他地方无法把vo从mList2中删除,vo将无法被回收


5、类的成员

如果是继承Ref类型的数据,如果用create()创建,需要在创建后调用retain()函数,否则会在帧的结束被回收。

如果是new的方法初始化的,不需要调用retain()

删除该数据或赋其他的值时,都需要调用release()方法

new 的方法创建的可以用CC_SAFE_DELETE(vo)这种方式删除。

总结

以上是内存溢出为你收集整理的Cocos2dx学习笔记(1) Ref类型数据 垃圾回收机制全部内容,希望文章能够帮你解决Cocos2dx学习笔记(1) Ref类型数据 垃圾回收机制所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1027585.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存