Pay for Hesitation: addEventListener, useWeakReference = true

Pages

2008年3月20日 星期四

addEventListener, useWeakReference = true

EventDispacher的addEventListener的function prototype如下:
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void

這裡想要強調的是最後一個參數useWeakReference,
這個參數可將此event object設為weakly reachable object。
好處是,當你的event target(就是註冊此eventListener馝物件)不再使用時(設為null),
當flash佔用的記憶體超過一個threshold,
Garbage collector就會自動把此wealy reachable object從EventDispacher的listener list中回收。

這樣聽起來好像在物件不再使用時,就不需要removeEventListner了?
但是不論在書上還是adobe的api都仍然強烈建議,當物件不再使用時,請務必先removeEventListener。
畢竟Garbage Collector何時會去回收是不可預期的,葚至AS3的garbage collector還存在一些bug,
在某些特殊的情形下,Garbage collector是不會去回收。

不過有設useWeakReference = true仍是一個好習慣,至少多一層影響performence的防護。
是這個你應該不陌生的blog所建議。



沒有留言: