Mi limiterò a seguire @ la risposta di Juan - GC deve essere considerato da zero come un aspetto critico del design dell'applicazione. Se crei un oggetto, devi essere consapevole di ogni riferimento ad esso, e rimuovere ogni riferimento e annullarlo per segnalare correttamente @. Se si fa riferimento a quell'oggetto nell'array, che conta, se lo si fa riferimento in un listener, che conta, se lo si fa riferimento tramite una variabile locale, che conta anche (anche se solo durante la vita della funzione), se è semplicemente nel elenco di visualizzazione, che sicuramente conta, e così via.
Mi spingo così lontano da scrivere le mie istruzioni di ascolto rimuovi prima di aggiungerle allo solo per essere sicuri che.
Scriverò quasi sempre un metodo public destroy() per qualsiasi oggetto per gestire gerarchie di oggetti interni (le parent calls distruggono sul child, che, a sua volta, chiama destroy su qualsiasi figlio ecc. Ecc.). La semplice rimozione/annullamento di un genitore senza farlo a ogni bambino è una cattiva gestione del GC.
E se si ha effettivamente qualche dubbio sul fatto che la perdita di memoria sia iniziata, tracciare Sistema.totalMemory solo per assicurarsi che:
var mem:String = Number(System.totalMemory/1024/1024).toFixed(2) + ‘Mb’;
trace(mem); // eg traces “24.94Mb”
Per lo più - tanto per essere metodico su di esso - non è la scienza a razzo, ma bisogna stare attenti.
Cheers -
@ e anche se lo fai, Flash rende una propria idea su quando farlo in realtà uno sweep. Il meglio che possiamo è assicurarsi che un oggetto sia opportunamente contrassegnato e fidati che verrà trattato in modo efficiente.
Questa è una domanda sui compiti o qualcosa del genere? – davr
No, ma l'ho messo come un haha ... L'idea è di avere un buon esempio di "goto" quando si pensa alle perdite di memoria in generale. Un buon "anti-modello", per così dire. – Skawful