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时被回收
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、类的成员