2010-05-06 14 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 questa classe, come indicano uno come riferimento debole e uno come riferimento forte.Riferimento debole e riferimento sicuro

risposta

4

la classe stessa emula un riferimento debole e può essere passato in giro come una sola.
se non ci sono altri riferimenti deboli al valore, è garbage collection, poiché il riferimento ad esso è stabilito attraverso un dizionario con chiavi (di riferimento) deboli.

non appena si ottiene il valore all'interno, si ottiene un riferimento dell'oggetto stesso, che, come tutti i riferimenti diretti agli oggetti in ActionScript, è un riferimento sicuro. finché si mantiene quel riferimento, l'oggetto non sarà raccolto.

edit:Differenza tra riferimenti deboli e forti
Durante l'esecuzione di un programma, la memoria deve essere gestito. I linguaggi di basso livello richiedono l'allocazione manuale della memoria (spazio libero) e la libera, quando l'oggetto non è più necessario. Le lingue di livello superiore utilizzano la garbage collection. Questo è un sistema che cerca di determinare, se gli oggetti sono ancora necessari, o sono "spazzatura", cioè possono essere scartati, liberando la memoria di cui hanno bisogno. Per determinare se un oggetto è necessario, il garbage collector tenta di trovare altri oggetti, che "conoscono" questo oggetto, cioè hanno un riferimento ad esso. Quando un oggetto è referenziato da altri oggetti, viene mantenuto (in effetti non lo è, poiché altrimenti oggetti non referenziati possono fare riferimento l'un l'altro ciclicamente, ma non entriamo troppo nei dettagli).
Quindi "conoscere"/riferirsi a un oggetto ha l'effetto collaterale di "tenerlo in vita", dal momento che non può essere rimosso. A volte, questo effetto collaterale non è desiderato. Ad esempio, se hai bisogno di un elenco di tutti gli oggetti esistenti per un po 'di tempo per un accesso più rapido, avere questo elenco li manterrebbe scartati, anche se quella lista è l'unico oggetto a cui mantenere dei riferimenti. Questo è il motivo per cui ci sono riferimenti deboli, in contrasto con i riferimenti normali che possono anche essere definiti "forti" poiché impediscono che l'oggetto venga raccolto. I riferimenti deboli consentono di fare riferimento a un oggetto, ma vengono ignorati dal garbage collector. Questo può spesso essere molto utile, come nel caso sopra descritto.

greetz
back2dos

+0

Mi può dare la definizione di riferimento debole e forte. non sono in grado di ottenere. spiacente – Kevin

+0

@ theband: si prega di consultare il mio aggiornamento. inoltre, potresti voler controllare http://en.wikipedia.org/wiki/Reference_counting#Use_in_garbage_collection per ulteriori dettagli. – back2dos

+0

Grazie mille per l'aggiornamento – Kevin

Problemi correlati