溫馨提示×

溫馨提示×

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

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

android智能指針怎么用

發(fā)布時間:2022-01-12 17:59:38 來源:億速云 閱讀:196 作者:iii 欄目:互聯(lián)網(wǎng)科技

本文小編為大家詳細介紹“android智能指針怎么用”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當(dāng),希望這篇“android智能指針怎么用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

其中要點:

1、智能指針引用計數(shù)框架原理:當(dāng)父對象要引用子對象時,就對子對象使用強引用計數(shù)技術(shù),而當(dāng)子對象要引用父對象時,就對父對象使用弱引用計數(shù)技術(shù),而當(dāng)垃圾收集系統(tǒng)執(zhí)行對象回收工作時,只要發(fā)現(xiàn)對象的強引用計數(shù)為0,而不管它的弱引用計數(shù)是否為0,都可以回收這個對象,但是,如果我們只對一個對象持有弱引用計數(shù),當(dāng)我們要使用這個對象時,就不直接使用了,必須要把這個弱引用升級成為強引用時,才能使用這個對象,在轉(zhuǎn)換的過程中,如果對象已經(jīng)不存在,那么轉(zhuǎn)換就失敗了,這時候就說明這個對象已經(jīng)被銷毀了,不能再使用了。

2、智能指針實現(xiàn)框架:由一個對象來提供引用計數(shù)器,但是這個對象不會去維護這個引用計數(shù)器的值,而是由智能指針來維護;具體說是,第一是要定義一個負責(zé)提供引用計數(shù)器的公共類,第二是實現(xiàn)相應(yīng)的智能指針對象類;

3、android源碼涉及RefBase,sp,wp

(1)強引用與弱引用計數(shù)

RefBase中有一個隱含的對象,該對象內(nèi)部有強弱引用計數(shù)。

sp化后,強弱引用計數(shù)各增加1,sp析構(gòu)后,強弱引用計數(shù)各減1

wp化后,弱引用計數(shù)加1,wp析構(gòu)后,弱引用計數(shù)減1

強引用為0,導(dǎo)致實際對象被delete

弱引用為0,將導(dǎo)致隱含對象被delete

(2)弱引用操作

弱指針的最大特點是它不能直接操作目標(biāo)對象,在于弱指針類沒有重載*和->操作符號,而強指針重載了這兩個操作符號。但是,如果我們要操作目標(biāo)對象,需要把弱指針升級為強指針。

(3)目標(biāo)對象生命周期控制

目標(biāo)對象生命周期控制除強弱引用計數(shù)外,還有flag標(biāo)志

 A. 如果對象的標(biāo)志位被設(shè)置為0,那么只要發(fā)現(xiàn)對象的強引用計數(shù)值為0,那就會自動delete掉這個對象;

        B. 如果對象的標(biāo)志位被設(shè)置為OBJECT_LIFETIME_WEAK,那么只有當(dāng)對象的強引用計數(shù)和弱引用計數(shù)都為0的時候,才會自動delete掉這個對象;

        C. 如果對象的標(biāo)志位被設(shè)置為OBJECT_LIFETIME_FOREVER,那么對象就永遠不會自動被delete掉,誰new出來的對象誰來delete掉。

讀到這里,這篇“android智能指針怎么用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向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