您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“android智能指針怎么用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“android智能指針怎么用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
其中要點:
1、智能指針引用計數框架原理:當父對象要引用子對象時,就對子對象使用強引用計數技術,而當子對象要引用父對象時,就對父對象使用弱引用計數技術,而當垃圾收集系統執行對象回收工作時,只要發現對象的強引用計數為0,而不管它的弱引用計數是否為0,都可以回收這個對象,但是,如果我們只對一個對象持有弱引用計數,當我們要使用這個對象時,就不直接使用了,必須要把這個弱引用升級成為強引用時,才能使用這個對象,在轉換的過程中,如果對象已經不存在,那么轉換就失敗了,這時候就說明這個對象已經被銷毀了,不能再使用了。
2、智能指針實現框架:由一個對象來提供引用計數器,但是這個對象不會去維護這個引用計數器的值,而是由智能指針來維護;具體說是,第一是要定義一個負責提供引用計數器的公共類,第二是實現相應的智能指針對象類;
3、android源碼涉及RefBase,sp,wp
(1)強引用與弱引用計數
RefBase中有一個隱含的對象,該對象內部有強弱引用計數。
sp化后,強弱引用計數各增加1,sp析構后,強弱引用計數各減1
wp化后,弱引用計數加1,wp析構后,弱引用計數減1
強引用為0,導致實際對象被delete
弱引用為0,將導致隱含對象被delete
(2)弱引用操作
弱指針的最大特點是它不能直接操作目標對象,在于弱指針類沒有重載*和->操作符號,而強指針重載了這兩個操作符號。但是,如果我們要操作目標對象,需要把弱指針升級為強指針。
(3)目標對象生命周期控制
目標對象生命周期控制除強弱引用計數外,還有flag標志
A. 如果對象的標志位被設置為0,那么只要發現對象的強引用計數值為0,那就會自動delete掉這個對象;
B. 如果對象的標志位被設置為OBJECT_LIFETIME_WEAK,那么只有當對象的強引用計數和弱引用計數都為0的時候,才會自動delete掉這個對象;
C. 如果對象的標志位被設置為OBJECT_LIFETIME_FOREVER,那么對象就永遠不會自動被delete掉,誰new出來的對象誰來delete掉。
讀到這里,這篇“android智能指針怎么用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。