Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Расходование памяти (http://www.flasher.ru/forum/showthread.php?t=92735)

atari 05.03.2007 13:24

Расходование памяти
 
Забивается память или нет?

Есть 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 ();
        }
}


etc 05.03.2007 14:00

Цитата:

Сообщение от atari
Забивается память или нет?

Твой класс, ты и должен ответить на этот вопрос. Если я скопирую класс ради теста, он у меня:
а) не заработает;
б) даже если заработает, показывать он ничего не будет.

atari 05.03.2007 14:50

Меня интересует в общем при таком подходе стек очищается от третьей функции или забивается?

etc 05.03.2007 15:01

Нет, к сожалению, времени для прогона тестов, но я бы для начала переписал код:

Код:

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 ();
        }
    }
}


Iv 06.03.2007 01:49

если требуется вызов интервала единожды, то лучше сделать специальный метод 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 будет выглядеть вот так:
Код:

public static function initTimerChangeBanner  (): Void {
    setTimer (1000, timerChangeBanner);
}

ну и так далее...

а память забиваться не будет. не беспокойся.

iNils 06.03.2007 01:56

Учитывая, что в AS3 уже документированы setTimeout/clearTimeout, то логично предположить, что данные методы недокументированные для 8-го плеера, будут описаны для него в флеш 9.

Iv 06.03.2007 02:10

да здесь это обычный пользовательский метод.
никакого хака.

etc 06.03.2007 02:43

Цитата:

Сообщение от Iv
никакого хака.

Объявление функции внутри метода таким образом, имхо, плохо.

Iv 06.03.2007 21:18

- в таком случае, создание одного объекта в другом объекте тоже плохо.

я думаю, что плохо, когда втыкается огромная функция, с которой попросту неудобно в таком случае работать.
а на паре строк особо не пострадает ни читабельность, ни юзабилити ни анбаггити :).

меня гораздо больше напрягает перспектива передавать имена методов стрингой.
имея ввиду: 'timerChangeBanner'.

etc 06.03.2007 23:10

Ну шо ж поделать, это setInterval.


Часовой пояс GMT +4, время: 18:25.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.