2010年4月28日 星期三

AS3裡出現不Single的Singleton


簡單的來說,就是有時候明明是使用Singleton.getInstance()但取得的instance就偏偏不是同一個。
一樣是一個開發上常會遇到的問題,今天我又遇到了,一下子以為是程式哪裡有bug,後來再看一下發現原來自己忘了會有這種情況發生,所以這次要記得寫下來放在blog上,免得以後自己又犯。

這問題會在這樣的結構下發生:
假設有一個載體A.swf,它會載入B.swfC.swf,然後有一個Singleton Class,就叫Singleton好了。
其中,B.swfC.swf都會使用Singleton.getInstance()來取得實體進行資料交換的動作,但是如果A.swf沒有先進行Singleton.getInstance()的話,B.swfC.swf所取得的實體會是不一樣的,這樣就一點都不single了。



解決方法一種就像剛剛講的,先在A.swf去取得Singleton的實體,但是這樣一來A.swf就永遠沒辦法跟B.swfC.swf進行鬆綁,是挺爛的一個解決方法。

另一個比較標準的解決方法就是在載入B.swfC.swf時順便把LoaderContextapplicationDomain設成ApplicationDomain.currentDomain就好了。