LoginSignup
1
1

More than 5 years have passed since last update.

Adobe Air SDK For iOS でアプリ開発する際のメモリリークの件

Posted at

Adobe Flash Professional CS6 でiOSアプリを開発する際メモリリークでアプリが急に落ちることがあります。場合によってアプリが起動できない場合もあります。その直接原因はメモリリークだと思いますが、リークする原因はAirSDKの問題かiOS自身の問題かはっきり分かりませんが、コードの書き方によりその問題を回避することもできます。
メモリリークといえば、宣言した変数、オブジェクトなどがGCがメモリを回収する際参照回数が1以上であれば、そのオブジェクトは回収対象にならなくて残ってしまいリークが始まるんです。
通常Flash PlayerまたはAIRから自動的にGCを行っています。Air for iOSも同様だと思いますが、ある特定の条件でGCする際アプリが落ちてしまいます。
例えば次のMySubMovというインスタンスを使ってnullにしなかった場合、メモリリークが起きてしまいます。

public class MySubMov extends MovieClip {
var myVar:Number;
var myInt:int;
var myStr:String;
}

Air SDKから開発したiOSアプリのメモリリークを検知する方法としてSystem.gc()(強制GC)を実行する方法があります。リークが始まる最中にSystem.gc()するとアプリがすぐ落ちますので、System.gc()をうまく使えばリークする場所を特定することができます。
上記のクラスのリークする直接原因はNumber型の変数を利用してnullで開放してないからです。
ActionScript3でNumberのデフォルト値はNaNで、nullではない、それが原因でしょうか、Air for iOSのNumber型に対するGCにはバグ?が有りかもしれないので、Air SDK for iOSでアプリを開発する際Number型の使用に気をつけましょう。浮動小数点はAction Script3版のBigDecimalを使ったほうがいいと思います。そしてできれば、クラスごとにdispose()メソッドを用意し、使い終わったオブジェクトについては必ずdispose()しましょう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1