[Titanium] メモリリークを起こさないために気をつけること

titanium_slipTitaniumでメモリリークを起こさないための良記事があった。

詳しくは読んでもらうとして、最後のおすすめガイドラインだけ翻訳。それぞれ自分の経験からコメントも書いてみた。

  • グローバル変数は使わない。グローバル変数はガベージコレクトされない。使うつもりなら考え直せ。
    → CommonJSモジュールのスタティックメンバーとして宣言する方法を使う。書き方はこちら
  • 変数を使うときは「var」宣言して使う。
    → 「use strict」を宣言するか。JSLintを使って常に監視する方法がお勧め。
  • 使い終わったオブジェクトは「null」をセットして開放する。
    → なるべくvar宣言したviewをaddしない書き方を心がける。
  • ビューの作成はインスタンス化して後で開放できるCommonJSモジュールでカプセル化する。もしくはAlloyを使う。
    → CommonJSモジュールで作っておけば開放するメソッド1つで管理できるから楽。・・・ということだと思う。
  • ビューやモデルをバインドしてるときは、使い終わったときに関連する繋がりを破壊する。
    → Alloyを使っているなら$.destoroy()を使う(Alloyを使った方がいいのかな。。。)
  • 後で開放するオブジェクトでない限りクロージャを使わない。
    → 記事内でfor文の中にクロージャを使ってaddEventListenerをバインドしているが、このような場合はどうすればいいのか?
    → starのカスタムプロパティにiをセットしてe.sourceでアクセスすればメモリリークは起きない?
  • グローバルなイベントリスナーは必ず1つだけバインドするように気をつける。
  • 他の言語で用いているテクニックをJavaScriptに持ち込まない。変数スコープ、var宣言の巻き上げ、prototype継承、クロージャを理解する。
  • グローバルな変数を利用するためにTitaniumプロキシ(Ti.*)を利用しない。
    → CommonJSモジュール内でスタティック宣言すればいい。

 

Titanium公式ドキュメントも参考に。

 

 

< Related Posts >