標籤:資料 obj 回調 lang cve targe 強引用 存在 object
一:什麼是弱引用
瞭解弱引用之前,先瞭解一下什麼是強引用
例如 : Object obj=new Object(); 就是一個強引用,記憶體配置一份空間給用以儲存Object資料,這塊記憶體有一個首地址,也就是obj所儲存的資料,記憶體配置的空間中不僅僅儲存著Object對象資訊,還儲存著自己(Object本身)被引用的次數。
當一個對象被強引用的形式建立的時候,本身被引用的次數已經為1.
接著Object o=obj; 這句代碼執行之後,obj指向的Object的儲存空間已經被引用了2次,所以Object儲存的被引用數值為2.
總結:強引用最終導致的結果就是被引用的對象的被引用次數+1;
相反的弱引用就是不會對被引用對象的被引用次數有任何影響。
二:弱引用有什麼作用
防止記憶體泄露。
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
C#的弱引用