Cocos2d-x   发布时间:2022-05-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Cocos2dx学习笔记(1) Ref类型数据 垃圾回收机制大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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();//引用计数=1
vo->retain();//引用计数=2

//......
//帧结束引用计数-1值为1不回收
//......
//下一帧开始时引用计数+1值为2
//......

//调用release()方法
vo->release();//引用计数-1

//......
//帧结束引用计数-1值为0被回收


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

TestVO*vo=TestVO::create();//引用计数=1
mList->pushBACk(vo);//引用计数=2
mList->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类型数据 垃圾回收机制所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。