Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.03.2007, 13:24
atari вне форума Посмотреть профиль Отправить личное сообщение для atari Посетить домашнюю страницу atari Найти все сообщения от atari
  № 1  
Ответить с цитированием
atari

Регистрация: 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 ();
	}
}

Старый 05.03.2007, 14:00
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от atari
Забивается память или нет?
Твой класс, ты и должен ответить на этот вопрос. Если я скопирую класс ради теста, он у меня:
а) не заработает;
б) даже если заработает, показывать он ничего не будет.

Старый 05.03.2007, 14:50
atari вне форума Посмотреть профиль Отправить личное сообщение для atari Посетить домашнюю страницу atari Найти все сообщения от atari
  № 3  
Ответить с цитированием
atari

Регистрация: Sep 2005
Сообщений: 9
Меня интересует в общем при таком подходе стек очищается от третьей функции или забивается?

Старый 05.03.2007, 15:01
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: 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 ();
        }
    }
}

Старый 06.03.2007, 01:49
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 5  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: 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 будет выглядеть вот так:
Код:
public static function initTimerChangeBanner  (): Void {
    setTimer (1000, timerChangeBanner);
}
ну и так далее...

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

Старый 06.03.2007, 01:56
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Учитывая, что в AS3 уже документированы setTimeout/clearTimeout, то логично предположить, что данные методы недокументированные для 8-го плеера, будут описаны для него в флеш 9.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 06.03.2007, 02:10
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 7  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
да здесь это обычный пользовательский метод.
никакого хака.

Старый 06.03.2007, 02:43
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от Iv
никакого хака.
Объявление функции внутри метода таким образом, имхо, плохо.

Старый 06.03.2007, 21:18
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 9  
Ответить с цитированием
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
- в таком случае, создание одного объекта в другом объекте тоже плохо.

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

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


Последний раз редактировалось Iv; 06.03.2007 в 21:20.
Старый 06.03.2007, 23:10
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Ну шо ж поделать, это setInterval.

Создать новую тему Ответ Часовой пояс GMT +4, время: 07:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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