Какую функцию собирать мусор перед оценкой? - PullRequest
2 голосов
/ 26 января 2011

У меня есть эта функция в классе:

private function fireItemCreated(data: ByteArray): void {
    setTimeout(function(): void {
        var event: ItemCreatedEvent = new ItemCreatedEvent(data);
        dispatchEvent(event);
    }, 1000);
}

Эта функция вызывается для отправки события создания элемента при создании эскиза изображения.

Но это задерживает событие на некоторое время, чтобы предотвратить зависание интерфейса пользователя. И я предполагаю, что могло бы произойти, если сборщик мусора выполняется после fireItemCreated вызова функции, но до события таймера. Будет ли закрытие удалено или останется до тех пор, пока оно не будет выполнено?

1 Ответ

4 голосов
/ 26 января 2011

Этого не может быть.

Если функция вызывается, то вызывается setTimeout. Объект-функция, переданный setTimeout, создает сильную привязку к закрытию со связанным контекстом выполнения и все функции обратного вызова *1000* setTimeout защищены ( строго удерживается ) движком хоста (представьте, что есть невидимый var timeouts = [], к которому у вас нет доступа). Было бы неинтересно, если бы злые капитаны Грайма магически поглотили таймеры.

Хороший вопрос и удачного кодирования.

Описанная проблема может действительно иметь место в некоторых других языках и их реализациях таймеров. См. .NET Threading.Timer Class и примечания.

...