您好,登錄后才能下訂單哦!
1、不調(diào)用autorelease()的情況
TestVO* vo = new TestVO(); //未調(diào)用create()方法創(chuàng)建,沒有執(zhí)行過autorelease() vo->init(); //這種情況下局部變量無法被回收 vo->release(); //需要手動調(diào)用release()方法 //CC_SAFE_DELETE(vo); //也可以用這種方法刪除
2、調(diào)用autorelease()的情況
TestVO* vo = TestVO::create(); //引用計數(shù)=1 //create()方法中執(zhí)行過autorelease() //引用計數(shù)設(shè)為1 //在幀結(jié)束的時候引用計數(shù)-1 //引用計數(shù)為0時被回收
3、手動調(diào)用retain()防止被刪除
TestVO* vo = TestVO::create();//引用計數(shù)=1 vo->retain();//引用計數(shù)=2 //...... //幀結(jié)束 引用計數(shù)-1 值為1 不回收 //...... //下一幀開始時 引用計數(shù)+1 值為2 //...... //調(diào)用release()方法 vo->release();//引用計數(shù)-1 //...... //幀結(jié)束 引用計數(shù)-1 值為0 被回收
4、被添加到cocos2d的數(shù)據(jù)結(jié)構(gòu)時
TestVO* vo = TestVO::create();//引用計數(shù)=1 mList->pushBack(vo);//引用計數(shù)=2 mList->popBack();//引用計數(shù)=1 能被回收 Vector<TestVO*>* mList2 = new Vector<TestVO*>(); mList2->pushBack(vo);//引用計數(shù)=2 無法被回收 //如果mList2是局部變量,其他地方無法把vo從mList2中刪除,vo將無法被回收
5、類的成員
如果是繼承Ref類型的數(shù)據(jù),如果用create()創(chuàng)建,需要在創(chuàng)建后調(diào)用retain()函數(shù),否則會在幀的結(jié)束被回收。
如果是new的方法初始化的,不需要調(diào)用retain()
刪除該數(shù)據(jù)或賦其他的值時,都需要調(diào)用release()方法
new 的方法創(chuàng)建的可以用CC_SAFE_DELETE(vo)這種方式刪除。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。