您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“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è)資訊頻道。
免責(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)容。