1. 程式人生 > >android智慧指標之強指標和弱指標

android智慧指標之強指標和弱指標

LightRefBase是輕量級的,那麼RefBase就應該是重量級的了,它的名字中少了lightAndroid為神馬要引入這個類呢?想一下這樣一個場景,現在有兩個物件:AB,物件A中有B的引用,因此B的引用等於1;物件B中有A的引用,因此物件A的引用對於1;現在問題來了,這兩個物件和外界的任何物件都沒有關係,也就說除了AB兩者之間有關係,別人和他們都沒有關係!現在他們就是多餘的了,應該被銷燬!但是由於AB的引用計數都是1,不為0,因此使用我們上面的方案解決不了了!還是會有記憶體洩露問題!怎麼辦呢??解決的辦法是這樣的,將引用分類,分為兩類:強引用和弱引用。強引用就是我們上面使用的那種,弱引用是什麼呢
?弱引用從字面上引用的力度比強引用要弱,事實確實是這樣。弱引用弱在哪裡呢?弱在保證使用物件的可靠性上。這麼說有點抽象,具體來說吧,像上面說的那個問題,如果A物件對B物件的引用是強引用的話,那麼B物件對A物件必須是弱引用,否則還有剛才說的迴圈引用的問題。物件的銷燬,關注的是物件的強引用,而不是物件的弱引用,也就是說如果物件的強引用為0的話不管物件的弱引用是多少直接delete!這就是弱引用弱的地方,也就是說你想使用的物件不一定存在呢!!另外,還有一個問題,那就是既然物件可能不存了,弱引用怎麼使用這個物件呢?面對這個問題,有這樣一個規定: