![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2005
Сообщений: 9
|
Забивается память или нет?
Есть 3 ф-ии в статическом классе В первой SetInterval'ом обращаемся ко второй Во второй очищаем его и обращаемся SetInterval'ом к третьей В третьей очищаем его и снова обращаемся к первой функции public static var intervalTimerChangeBanner: Number;
public static function initTimerChangeBanner (): Void {
intervalTimerChangeBanner = setInterval (function () : Void {
timerChangeBanner ();
}, 1000)
}
public static function timerChangeBanner (): Void {
if (что-то ) {
clearInterval(intervalTimerChangeBanner);
...
intervalTimerChangeBanner = setInterval (function () : Void {
timerLoadBanner ();
}, 300)
}
}
public static function timerLoadBanner (): Void {
if ( что-то) {
clearInterval(intervalTimerChangeBanner);
initTimerChangeBanner ();
}
}
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Цитата:
а) не заработает; б) даже если заработает, показывать он ничего не будет. |
|
|||||
|
Регистрация: Sep 2005
Сообщений: 9
|
Меня интересует в общем при таком подходе стек очищается от третьей функции или забивается?
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Нет, к сожалению, времени для прогона тестов, но я бы для начала переписал код:
class Example {
public static var intervalTimerChangeBanner:Number;
public static function initTimerChangeBanner():Void {
Example.intervalTimerChangeBanner = setInterval(Example,'timerChangeBanner', 1000);
}
public static function timerChangeBanner():Void {
if (что-то) {
clearInterval(Example.intervalTimerChangeBanner);
…
Example.intervalTimerChangeBanner = setInterval(Example,'timerLoadBanner', 300);
}
}
public static function timerLoadBanner():Void {
if (что-то) {
clearInterval(Example.intervalTimerChangeBanner);
Example.initTimerChangeBanner ();
}
}
}
|
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
если требуется вызов интервала единожды, то лучше сделать специальный метод setTimer, в котором прописать самоочистку:
class MyClass {
private static function setTimer (delay:Number, callback:Function, args:Array):Void {
var interval:Number = setInterval(
function () {
clearInterval(interval);
callback.apply(MyClass, args);
}, delay || 0
);
}
..........................
}
тогда твой код метод initTimerChangeBanner будет выглядеть вот так: ну и так далее... а память забиваться не будет. не беспокойся. |
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
да здесь это обычный пользовательский метод.
никакого хака. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Цитата:
|
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
- в таком случае, создание одного объекта в другом объекте тоже плохо.
я думаю, что плохо, когда втыкается огромная функция, с которой попросту неудобно в таком случае работать. а на паре строк особо не пострадает ни читабельность, ни юзабилити ни анбаггити .меня гораздо больше напрягает перспектива передавать имена методов стрингой. имея ввиду: 'timerChangeBanner'. Последний раз редактировалось Iv; 06.03.2007 в 21:20. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Ну шо ж поделать, это setInterval.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 07:26. |
|
|
« Предыдущая тема | Следующая тема » |
|
|