• 强、弱引用


    弱引用英文叫做weak reference,与之相反的是强引用(strong reference)。引用不是对象本身,而是类似于指向对象的一个指针。通常都说当至少还存在一个引用指向某个对象的时候,这个对象就不会被gc,这里所说的引用就是强引用,而不是弱引用。反过来说,即使有N多弱引用指向某个对象,而没有一个强引用指向该对象时,这个对象也会被gc,当gc发生后,所有的弱引用指向的对象就不存在了。这就是强引用与弱引用的本质区别。

    AS3中常用到弱引用的地方有addEventListener方法和Dictionary类。
    addEventListener方法的参数表为addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false)。其中第5个参数表示是否使用弱引用。此参数的意义:类级别成员函数不属于垃圾回收的对象,因此可以对类级别成员函数将 useWeakReference 设置为 true 而不会使它们受垃圾回收的影响。如果对作为嵌套内部函数的侦听器将 useWeakReference 设置为 true,则该函数将作为垃圾回收并且不再是永久函数。如果创建对该内部函数的引用(将该函数保存到另一个变量中),则该函数将不作为垃圾回收并仍将保持永久。----就是对内部函数有作用。。。

    Dictionary的弱引用(使用时,需要 var dic:Dictionary = new Dictionary(false);)与addEventListener的原理相同,只不过Dictionary的弱引用指的是对key的弱引用,而不是对value的弱引用。实际上Dictionary对象中保留的是对value的强引用,而且就算value对应的key对象已经被gc了,Dictionary对象中对value的强引用还存在,而且还造成一个不好的影响,就是key被gc后,就无法删除Dictionary对象中对value的强引用。因此我觉得在使用Dictionary对象的时候,如果要删除key的话,应首先delete Dictionary对象中对value的强引用。

    =========================巧用Dictinary弱引用=================================

    var dic:Dictionary = new Dictionary(false);

    dic[value] = key; // 用value作为键,这样即为用弱引用的形式来存储对象,可以通过 dic[obj] == undefined 来检查某对象是否被回收了。 ---  对象管理器。

  • 相关阅读:
    ASP.NET Core Identity 实战(3)认证过程
    ASP.NET Core Identity 实战(2)——注册、登录、Claim
    C#代码风格指南
    看eShopOnContainers学一个EventBus
    105.电脑中共享盘保存密码之后,删掉默认保存密码的操作方法
    005.abap中宏的使用
    002.64位系统的SAP学习机
    在react/redux中使用Immutable
    ajax与HTML5 history API实现无刷新跳转
    阿里前端实习生面试总结(两轮技术面+一轮hr面)
  • 原文地址:https://www.cnblogs.com/maomaolw3/p/4368374.html
Copyright © 2020-2023  润新知