关于AS3中SharedObject对象的一些Bug现象……

以前一直没怎么用过SharedObject这个对象,最近用了下,发现很多问题,不知道Adobe 在设计这个类的时候是怎么设计的,还是Adobe的工程师 脑袋都被驴踢了……
1、首先,你不要指望在一个类中定义一个静态变量引用SharedObject.getLocal("...")就可以在程序 运行期间毫无限制的获取这个对象的数据 ,如果你这么想,那么很抱歉的告诉你,你错了。只能在需要用到它的时候定义一个变量引用它。
2、如果多个swf 共享一个SharedObject对象的数据,那么在用完之后请将引用置空,例如:

  1. var so:SharedObject = SharedObject.getLocal("...");
  2. ...(中间的操作步骤略)
  3. so = null;(这里也可以使用delete:delete so;)
复制代码

如果你不这么操作,ok,你将看到类似于数据缓存一样的效果 ,在第一个swf中操作so,然后在第二个so中操作数据,回到第一个swf中查看之前的数据,你会惊讶的发现数据竟然没有改变……(O__O"…)

OK,我知道Flash在内存回收方面处理的很烂,这也同样给了很多人攻击它的理由,但SharedObject这个类的机制设计成这样还是让我很是汗颜……光这个问题我就调试了半天……后来在一个台湾的论坛里找到了答案,现在贴出来以后大家都要注意这个问题了……

引自:http://forum.j2eemx.com/flash /970-swf-sharedobject.html

SharedObject 從 Flash 6 開始支援到現在已經有好幾年的時間了
使用上雖然相當容易
但是很多特性仍然是不清楚
尤其是文件 上都沒有寫
以下為個人對於「不同 swf 使用單一 SO 物件時的一致性」的一些心得:
要保持不同 swf 檔案之間 so 物件的一致性
一定要將舊的 SharedObject Ref. 刪除
重新呼叫 SharedObject.getLocal(),以更新 so 物件

直接重新指定參考so = SharedObject.getLocal() 是沒有用的
因為舊的 so 物件不會被回收

丟棄 so 物件可以用 delete 或是指定為 null

單一 swf 內,重複使用 SharedObject.getLocal() 取得相同名稱的so 物件
假如未將之前取得的 so 物件丟棄
後續用 SharedObject.getLocal() 取得的so永遠是同一個so物件參考
(ref. equal) Singleton?

多個 swf 陸續呼叫 SharedObject.getLocal() 取得相同 so 物件之後
假如都沒有釋放取得的 so 物件,進行指定資料的動作
在沒有呼叫 flush() 情況下,so 物件並不會立即寫入資料
而是在 so 釋放時,才將資料寫入
只有最後一個取得 so 物件的 swf 具有真正寫入 *.sol file 的權力

不違反上一個條件的情況下
上述情況可以用 SharedObject.flush() 讓資料立即寫入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值