• 05 «
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • » 07
ASOK?
ActionScriptでFlashつくるよ
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
page top

ローカルSharedObjectでちょっとはまった件。

いったん保存したローカルSharedObjectは、FlashPlayer設定マネージャの[Web サイトの記憶領域設定] パネルで、ドメインごとに削除することができる。

ローカルSharedObjectを使ったFlashで、最初のロード時、つまりSharedObjectにまだデータが保存されていない状態をテストしようとした。
ところが設定マネージャで削除して、Flashをリロードしてもデータが保存されている。

ヒントはドキュメントにあった。

flush (SharedObject.flush メソッド )
public flush([minDiskSpace:Number]) : Object
ローカル永続共有オブジェクトをすぐにローカルファイルに書き込みます。このメソッドを使用しない場合、共有オブジェクトがファイルに書き込まれるのは、そのオブジェクトのセッションが終了した時点となります。つまり、その SWF ファイルを閉じた時点、その共有オブジェクトに対する参照がなくなってガベージコレクションされた時点、 または SharedObject.clear() が呼び出された時点のいずれかです。

ローカルSharedObjectに書き込みをしSharedObject.flush()を使わなかった場合、実際にHDDに保存されるのは、swfファイルが閉じた時点。

つまり先のテストでは、以下のようなことが起こっている。

  1. テストFlash内でローカルSharedObjectに書き込む。この時点ではまだHDDには保存されていない。
  2. 設定マネージャでローカルSOを削除。
  3. テストFlashをリロードする。
  4. テストFlashが閉じられ、ローカルSOのデータが実際にHDDに書き込まれる。
  5. テストFlashが新たにロードされ、HDDからローカルSOデータが読み込まれる。

結論

適切なタイミングで、SharedObject.flush()を使いましょう。

ここで、ローカルSharedObjectに書き込んだらすぐにSharedObject.flush()を使用する、と結論するのは間違い。わざわざ遅延書き込みするのは、おそらくパフォーマンスのせいなので。

関連記事
page top

コメント

管理者にだけ表示を許可する
 

トラックバック
TB*URL
Copyright © 2005 ASOK?. all rights reserved.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。