(過ぎたことは忘れちまえ)つらつら書くなり
カレンダー
カテゴリー
プロフィール
HN:
lenguasydialectos
性別:
男性
ブログ内検索
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
この間わからなかったGoogleAPIの問題が解決したので覚書。
結局どういうことだったのかというと、ある特定の関数内で定義されたひとつの変数を使用して、無名関数を設定したインスタンスをforループ内でGMapのイベントリスナーに登録しても、最後の一つ以外はアクセス不能とみなされて削除(たぶんガーベッジコレクション)されてしまう。
つまり、
function createSomething(g_Map){
var something;
for(i=0;i<10;i++){
something= new kind_of_thing(function(){do_something();});
g_Map.addListener(something);
//ここでまとめてグーグルマップにインスタンスを登録しようとする。
}
return;
}
はダメで、
function getSomething(){
return new kind_of_thing(function(){do_something();});
}
function addSomethingToGMap(g_Map){
for(i=0;i<10;i++){
g_Map.addListener(getSomething());
}
return;
}
のように、関数を分割して、
リスナー登録関数に直接インスタンスを渡さないと機能しない。
らしい。(ようするにポインタの機能はないってこと)
解決してみれば何のことはない、記述の曖昧さが招いた単純ミスだった。
結局どういうことだったのかというと、ある特定の関数内で定義されたひとつの変数を使用して、無名関数を設定したインスタンスをforループ内でGMapのイベントリスナーに登録しても、最後の一つ以外はアクセス不能とみなされて削除(たぶんガーベッジコレクション)されてしまう。
つまり、
function createSomething(g_Map){
var something;
for(i=0;i<10;i++){
something= new kind_of_thing(function(){do_something();});
g_Map.addListener(something);
//ここでまとめてグーグルマップにインスタンスを登録しようとする。
}
return;
}
はダメで、
function getSomething(){
return new kind_of_thing(function(){do_something();});
}
function addSomethingToGMap(g_Map){
for(i=0;i<10;i++){
g_Map.addListener(getSomething());
}
return;
}
のように、関数を分割して、
リスナー登録関数に直接インスタンスを渡さないと機能しない。
らしい。(ようするにポインタの機能はないってこと)
解決してみれば何のことはない、記述の曖昧さが招いた単純ミスだった。
PR
この記事にコメントする