Titanium-androidで原因不明で突然落ちることがあって、
それも普段はうまくいっているのに、数が増えてくると落ちる
みたいな現象を調査していたところぶち当たりました。
原因
「local reference table overflow」
よくみたらこんな文字がエラーログに載っていたので、検索してみると、どうもローカル参照がどうのこうのということでたくさんヒットします。結構昔のブログやTitanium界隈の有名なお方のツイートとかもあるので、結構メジャーなバグのようです。
#TitaniumというかAndroidの?
結論としてはどうも、下記のような感じで
現在画面に表示しているものプロパティにループで参照していると、
数が増えた時にアウトになってしまうようです。
:厳密には違うのかもしれませんが・・
for (var i in view.children) { var p = view.children[i].rect.height; }
rect.height以外にもdisplayCapsなどでもダメなので、
あれはダメこれはダメと、きっとプロパティによって
メモリの使い方が違うんでしょう。
対処法
これを思いつくまでハマりまくりましたが、思いつけば非常に簡単で、
直接表示しているものへの参照をはずせばいいだけなんです。
var children = view.children; for (var i in children) { var p = children[i].rect.height; }
こんな感じでコピーして表示しているものを直接参照しなければうまく動きます。
なんかメモリもったいない気がしますが気にしない。
scrollviewの全子供viewの高さを知りたかった自分は
非常に苦戦しました。。