[Titanium] メモリリークを起こさないために気をつけること
Titaniumでメモリリークを起こさないための良記事があった。
詳しくは読んでもらうとして、最後のおすすめガイドラインだけ翻訳。それぞれ自分の経験からコメントも書いてみた。
- グローバル変数は使わない。グローバル変数はガベージコレクトされない。使うつもりなら考え直せ。
→ 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 >