Руководство по actionscript. часть 3, стр. 131

Однако, как уже говорилось в гл. 14, даже после того, как все ссылки на объект будут удалены, он продолжает быть активным до тех пор, пока сборщик мусора не удалит его из памяти. Например, если объект зарегистрировал приемники для события Event. ENTER FRAME, то это событие будет по-прежнему приводить к выполт нению кода. Подобным образом, если объект запустил таймеры, используя метод

setlnterval ( ) иликласс Time г, эти таймеры будут по-прежнему приводить к выполнению кода. Точно так же, если объект является экземпляром класса MovieClip, воспроизводимым в настоящий момент, его головка воспроизведения будет продолжать перемещаться, приводя к выполнению существующих сценариев кадров.

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

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

Всегда деактивируйте отображаемые объекты перед их уничтожением.

Удаление всех детей

Язык ActionScript не предоставляет прямого способа для удаления всех детей объекта. Следовательно, чтобы удалить всех отображаемых детей из конкретного объекта, мы должны использовать циклы while или for. Например, следующий код использует цикл while для удаления всех детей объекта родитель в направлении снизу вверх. Сначала удаляется ребенок на глубине 0, затем глубина всех детей уменьшается на 1, после этого удаляется новый ребенок на глубине 0, и этот процесс повторяется до тех пор, пока у объекта не останется детей.

// Удаляем всех детей — объекта родитель while (родитель. numChildren > 0) { родитель. removeChiIdAt(0);

}

Следующий код также удаляет всех детей объекта родитель, но в направлении сверху вниз.. Однако использования такого кода следует избегать, поскольку он медленнее предыдущего, применяемого для удаления детей в направлении снизу вверх.

while (родитель. numChildren > 0) { родитель. removeChiIdAt(родитель. numChi 1 dren-1);

}

Следующий код удаляет всех детей в направлении снизу вверх с помощью цикла for вместо цикла while:

for (:numChildren > 0:) { родитель. removeChiIdAt(0):

}

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

// ВНИМАНИЕ: ПРОБЛЕМНЫЙ КОД! НЕ ИСПОЛЬЗОВАТЬ!

for (var i:int = 0: i < родитель.numchildren: i++) { родитель .removechi1dat(i):

}

Что же неправильно с предыдущим циклом for? Представьте, что у объекта родитель есть три ребенка — А, В и С, — которые находятся на глубинах 0,1 и 2 соответственно:

Дети Глубины А 0 В 1

С 2

Когда цикл выполняется в первый раз, значение счетчика i равно 0, поэтому удаляется объект А. После удаления объекта А глубины объектов В и С автоматически уменьшаются на 1, таким образом, глубина объекта В теперь равна 0, а глубина объекта С — 1:

Дети Глубины В 0 С 1

Когда цикл выполняется во второй раз, значение счетчика i равно 1, поэтому удаляется объект С. После удаления объекта С значение переменной роди тель. numChildren становится равным 1 и цикл завершается, поскольку значение переменной i перестает быть меньше значения переменной родитель. numChildren. Но объект В никогда не будет удален!

Изменение родителей элементов

В языке ActionScript версии 3.0 удаление ребенка из одного экземпляра объекта DisplayOb j ectContainer и его перенос в другой экземпляр является совершенно допустимой и распространенной операцией. На самом деле действие по добавлению объекта в контейнер приводит к автоматическому удалению этого объекта из любого контейнера, в котором он находился до настоящего момента.

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Оставить комментарий

Вы должны авторизоваться для отправки комментария.

Полезные ссылки
Случайные записи
  • 01.03.2011">Руководство по actionscript. часть 5, стр. 133
  • 07.03.2011">Руководство по actionscript. часть 4, стр. 118
  • 04.03.2011">Руководство по actionscript. часть 5, стр. 050
  • 29.07.2011">Каждому дачному участку – по садовому домику
  • 22.01.2011">Руководство по actionscript. часть 1, стр. 134
  • 02.03.2011">Руководство по actionscript. часть 5, стр. 103
  • 12.03.2011">Руководство по actionscript. часть 3, стр. 134
  • 13.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.93
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.50
  • 19.11.2011">Обзор HTC Radar
  • 12.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.108
  • 26.02.2011">Руководство по actionscript. часть 6, стр. 051
  • 22.01.2011">Руководство по actionscript. часть 1, стр. 124
  • 15.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.56
  • 20.02.2011">Как сделать дождь в Adobe Photoshop?
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...