Показать сообщение отдельно
Старый 09.02.2013, 15:20
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 14  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
ну как же? Тут бесконечно будут создаваться переменные итераторы 60 раз в секунду
Вы вызвали двойной фейспалм у меня >_<.
4 байта, на стеке, будет создаваться 60 раз в секунду. Какой ужас!
При чем место на стеке и при взятии значения поля(не переменной), если не ошибаюсь, тоже выделяется.
Завязывайте с придумыванием себе проблем. Об этих 4-х байтах даже GC не знает - они автоматом после отработки функции сносятся.

Или, по-крайней мере, прочитайте доки по работе виртуальной машины, структуре байткода, посмотрите во что компилируется тот или иной код,
а уже потом придумывайте себе что и когда будет тормозить.

Вот что может создать проблемы, т.к. память выделяется на куче, с последующей сборкой GC и прочими прелестями (но не в вашем случае - 60 раз в секунду выделить память под Point - это фигня на постном масле):
Код AS3:
var point:Point = new Point(x, y);
но не это:
Код AS3:
var point:Point = _anotherPoint;
и не это:
Код AS3:
var n:int = 100;

Цитата:
А что тут отгребать? Просто убираем функцию из вектора
Код AS3:
for each (f in _myFuncVector)
{
    f()
    // а внутри f вызывается removeFunc(...),
    // а внутри removeFunc вызывается _myFuncVector.splice(i, 1);
    // а мы, вообще-то идем по этому _myFuncVector
}
Самое тупое решение - скопировать список перед итерацией и итерировать по копии
Кстати, тут и с добавлением функции внутри функции те же проблемы будут.
Это типичная проблема для всяких самописных Signal-ов и EventDispatcher-ов (в стандартном, вроде, решена)
Если Вы уверены - что внутри слушателя не будете никого подписывать/отписывать - можете забить.


Последний раз редактировалось expl; 09.02.2013 в 15:39.