Study Flex《强引用与弱引用》
一、描述 前面被问到了,心里只有个影子,并不深入。比如: 是什么、区别、应用范围等。 二、解决方法 google、度娘了一大圈才有所明白。 三、原因 由于系统垃圾回收机(gc)制而提出来的。 四、实现 1.是什么: 强引用:也就是我们通常所讲的引用,其存亡直接决定了所指对象的存亡。如果不存在指向一个对象的引用,并且此对象不再显示列表中,则此对象会被从内存中释放。 弱引用:除了不决定对象的存亡外,其他与强引用相同。即使一个对象被持有无数个若引用,只要没有强引用指向他,那么其还是会被清除。 2.应用范围 AS3中常用到弱引用的地方有addEventListener方法和Dictionary类。 ----------------------- addEventListener(type:String,listener:Function,useCapture:Boolean = false,priority:int = 0,useWeakReference:Boolean = false)。 其中第5个参数表示是否使用弱引用。 当useWeakReference=false时,EventDispatcher.addEventListener就会在EventDispatcher对象中添加一个对listener这个函数对象的强引用; 当useWeakReference=true时,EventDispatcher.addEventListener方法在EventDispatcher对象中添加的是对listener的弱引用。 ----------------------- //true表示使用弱引用 五、效果 private function loadTest():void{ var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE,loadedHandler,false,true); loader.loader(new URLRequest( "url" )); } private function loadedHandler(evt:Event):void{ ( evt.target as Loader ).removeListener(Event.COMPLETE,loadedHandler); // Do others. } 这时谁先消亡,谁后消亡? 因为是弱引用,所以也不会执行 loadedHandler(); 六、说明 1.此思想来自网络。 2.更多内容可参考:http://www.flashas.net/asbc/20090423/4107.html 3.弱引用问题:http://wu2yong3jinh.ixiezi.com/2010/06/24/asflex-as3%E9%9A%BE%E6%9F%A5%E7%9A%84%E9%94%99%E8%AF%AF%E6%A0%B9%E6%BA%90%E4%B9%8B%E5%BC%BA%E5%BC%B1%E5%BC%95%E7%94%A8%E5%9C%A8%E4%BD%9C%E7%A5%9F/ 4.感谢无私奉献 ------------------------------------------------------------------- (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |