2010-05-06 15 views
5
package uk.co.bigroom.utils 
{ 
    import flash.utils.Dictionary; 
    /** 
    * Class to create a weak reference to an object. A weak reference 
    * is a reference that does not prevent the object from being 
    * garbage collected. If the object has been garbage collected 
    * then the get method will return null. 
    */ 
    public class WeakRef 
    { 
     private var dic:Dictionary; 

     /** 
     * The constructor - creates a weak reference. 
     * 
     * @param obj the object to create a weak reference to 
     */ 
     public function WeakRef(obj:*) 
     { 
      dic = new Dictionary(true); 
      dic[obj] = 1; 
     } 

     /** 
     * To get a strong reference to the object. 
     * 
     * @return a strong reference to the object or null if the 
     * object has been garbage collected 
     */ 
     public function get():* 
     { 
      for (var item:* in dic) 
      { 
       return item; 
      } 
      return null; 
     } 
    } 
} 

In dieser Klasse, wie sie eine als schwache Referenz und eine als starke Referenz bezeichnen.Schwache Referenz und Starke Referenz

Antwort

4

Die Klasse selbst emuliert eine schwache Referenz und kann als eine Einheit weitergegeben werden.
Wenn es keine anderen schwachen Verweise auf den Wert gibt, wird Garbage gesammelt, da der Verweis darauf durch ein Wörterbuch mit schwachen (Referenz-) Schlüsseln hergestellt wird.

Sobald Sie den Wert innerhalb erhalten haben, erhalten Sie eine Referenz des Objekts selbst, die wie alle direkten Objektreferenzen in ActionScript eine starke Referenz ist. Solange Sie diese Referenz beibehalten, wird das Objekt nicht als Müll gesammelt.

edit:Unterschied zwischen schwachen und starken Referenzen
Während der Ausführung eines Programms, benötigt Speicher verwaltet werden. Low-Level-Sprachen erfordern, dass Sie manuell Speicher zuweisen (freien Speicherplatz anfordern) und ihn freigeben, wenn das Objekt nicht mehr benötigt wird. Übergeordnete Sprachen verwenden Garbage Collection. Dies ist ein System, das versucht zu bestimmen, ob Objekte noch benötigt werden oder "Müll" sind, d. H. Verworfen werden können, wodurch der Speicher freigegeben wird, den sie benötigen. Um festzustellen, ob ein Objekt benötigt wird, versucht der Speicherbereiniger, andere Objekte zu finden, die dieses Objekt "kennen", d. H. Einen Verweis darauf haben. Wenn ein Objekt von anderen Objekten referenziert wird, wird es beibehalten (in der Tat ist es nicht, da sich ansonsten nicht referenzierte Objekte zyklisch aufeinander beziehen können, aber nicht zu sehr ins Detail gehen).
Das "Wissen"/Verweisen auf ein Objekt hat den Nebeneffekt "es am Leben zu halten", da es nicht entfernt werden kann. Manchmal wird dieser Nebeneffekt nicht erwogen. Wenn Sie beispielsweise eine Liste aller vorhandenen Objekte für einen schnelleren Zugriff benötigen, würde diese Liste verhindern, dass sie gelöscht werden, auch wenn diese Liste das einzige Objekt ist, das Referenzen auf sie enthält. Dies ist der Grund, warum es schwache Referenzen gibt, im Gegensatz zu normalen Referenzen, die auch als "stark" bezeichnet werden können, da sie verhindern, dass das Objekt als Müll gesammelt wird. Schwache Referenzen ermöglichen Ihnen, auf ein Objekt zu verweisen, werden aber vom Garbage Collector ignoriert. Dies kann oft sehr hilfreich sein, wie in dem oben beschriebenen Fall.

greetz
back2dos

+0

Können Sie mir die Definition für schwache und starke Referenz geben. Ich bin nicht in der Lage zu bekommen. Entschuldigung – Kevin

+0

@theband: Bitte sehen Sie mein Update. Sie können auch http://en.wikipedia.org/wiki/Reference_counting#Use_in_garbage_collection für weitere Details überprüfen. – back2dos

+0

Vielen Dank für das Update – Kevin

Verwandte Themen