溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Cocos2dx學(xué)習(xí)筆記(1) Ref類型數(shù)據(jù) 垃圾回收機制

發(fā)布時間:2020-06-11 11:54:41 來源:網(wǎng)絡(luò) 閱讀:1091 作者:葡萄甜醋 欄目:游戲開發(fā)

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)這種方式刪除。





向AI問一下細節(jié)

免責(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)容。

AI