首页 > 代码库 > Cocos2d-X 3.X Ref类型数据 垃圾回收机制
Cocos2d-X 3.X Ref类型数据 垃圾回收机制
1、不调用autorelease()的情况
TestVO* vo = new TestVO(); //未调用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 = new Vector<TestVO*>(); mList2->pushBack(vo);//引用计数=2 无法被回收 //如果mList2是局部变量,其他地方无法把vo从mList2中删除,vo将无法被回收
5、类的成员
如果是继承Ref类型的数据,如果用create()创建,需要在创建后调用retain()函数,否则会在帧的结束被回收。
如果是new的方法初始化的,不需要调用retain()
删除该数据或赋其他的值时,都需要调用release()方法
new 的方法创建的可以用CC_SAFE_DELETE(vo)这种方式删除。
本文出自 “葡萄甜醋” 博客,请务必保留此出处http://putaotiancu.blog.51cto.com/8627957/1598272
Cocos2d-X 3.X Ref类型数据 垃圾回收机制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。