弱参考和强参考

Kev*_*vin 5 apache-flex actionscript

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在这个类中,它们如何表示一个弱引用和一个作为强引用.

bac*_*dos 4

该类本身模拟弱引用,并且可以作为一个传递。
如果没有对该值的其他弱引用,则该值将被垃圾收集,因为对该值的引用是通过具有弱(引用)键的字典建立的。

一旦获得其中的值,您就获得了对象本身的引用,与 ActionScript 中的所有直接对象引用一样,它是一个强引用。只要保留该引用,该对象就不会被垃圾收集。

编辑: 弱引用和强引用之间的区别
在程序执行期间,需要管理内存。低级语言要求您手动分配内存(获取可用空间)并在不再需要对象时释放它。高级语言使用垃圾收集。这是一个试图确定对象是否仍然需要的系统,或者是“垃圾”,即可以被丢弃,释放它们所需的内存。为了确定是否需要某个对象,垃圾收集器尝试查找“知道”该对象(即拥有对该对象的引用)的其他对象。当一个对象被其他对象引用时,它会被保留(事实上并非如此,因为否则未引用的对象可以循环引用彼此,但我们不要过多讨论细节)。
因此,“了解”/引用一个对象具有“使其保持活动”的副作用,因为它无法被删除。有时,这种副作用并不是我们所希望的。例如,如果您需要某个时间的所有现有对象的列表以便更快地访问,则拥有此列表可以防止它们被丢弃,即使该列表是唯一保存对它们的引用的对象。这就是为什么存在弱引用,与普通引用相反,普通引用也可以称为“强”引用,因为它们可以防止对象被垃圾收集。弱引用允许您引用对象,但会被垃圾收集器忽略。正如上述情况,这通常非常有帮助。

问候语
back2dos