一:什麼是弱引用html
瞭解弱引用以前,先了解一下什麼是強引用網絡
例如 : Object obj=new Object(); 就是一個強引用,內存分配一份空間給用以存儲Object數據,這塊內存有一個首地址,也就是obj所保存的數據,內存分配的空間中不單單保存着Object對象信息,還保存着本身(Object自己)被引用的次數。app
當一個對象被強引用的形式建立的時候,自己被引用的次數已經爲1.異步
接着Object o=obj; 這句代碼執行以後,obj指向的Object的存儲空間已經被引用了2次,因此Object保存的被引用數值爲2.函數
總結:強引用最終致使的結果就是被引用的對象的被引用次數+1;post
相反的弱引用就是不會對被引用對象的被引用次數有任何影響。url
二:弱引用有什麼做用3d
防止內存泄露。htm
Object obj=new Object();對象
當你在經過異步的形式訪問網絡上面的資源的時候,須要的時間可能會比較長,在數據返回以前,用戶極可能轉向了其餘的頁面,若是異步訪問的對象(obj)對本地的一個對象(Object)是強引用的話,那麼在這個異步訪問對象(obj)被釋放以前,也即在數據被回調以前,這個被引用的對象(Object)是不會被銷燬的,這樣一來,就致使內存一直被佔用。
WeakReference weakObj=new WeakReference(Object);
此時就能夠使用弱引用,弱引用對象(weakObj)發出異步請求,在回調以前,若是用戶要轉到其餘的頁面,這個被引用的對象(Object)是能夠被釋放的,這樣子就不會出現內存一直被佔用的現象。
三:怎樣使用弱引用
弱引用類: WeakReference //有兩個重載的構造函數
WeakReference WeakObj=new WeakReference(Object);//弱引用方式
IsAlive屬性是判斷此弱引用對象所引用的對象是否還存在,存在:IsAlive=True;
Target屬性是設置該弱引用對象所引用的數據對象的值
MSDN: http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28SYSTEM.WEAKREFERENCE%29;k%28WEAKREFERENCE%29;k%28TargetFrameworkMoniker-%22SILVERLIGHT%2cVERSION%3dV4.0%22%29;k%28DevLang-CSHARP%29&rd=true