Итак, я играл с Flash, просматривая документацию и все такое, и заметил, что событие ENTER_FRAME, похоже, не оправдывает мое ожидание детерминированной вселенной.
Рассмотрим следующий пример:Как происходит событие Actionscript 3 ENTER_FRAME - сумасшедшие орехи?
(new MovieClip()).addEventListener(Event.ENTER_FRAME,
function(ev) {trace("Test");});
Заметим, что это анонимный MovieClip не добавляется в иерархии отображения, и любая ссылка на него сразу теряется.
На самом деле он напечатает «Тест» после кадра, пока не будет собран мусор. Как это безумие? Поведение этого на самом деле определяется тем, что сборщик мусора чувствует, что он приближается во всем своем непредсказуемом безумии! Есть ли лучший способ создать прерывистые сбои? Серьезно.
Мои две теории состоят в том, что либо класс DisplayObject хранит слабые ссылки на все его экземпляры с целью отправки событий ENTER_FRAME, либо, и многое другое, Flash Player действительно просматривает кучу каждого кадра, ищущего прослушивание прослушивателей ENTER_FRAME ,
Может ли какой-нибудь затвердевший разработчик Actionscript подсказывать мне, как это работает? (И, может быть, почему именно? F ** k они думали, что это была хорошая идея?)
Удаленный ответ, не хочу вызывать путаницу. И ты прав. Это имеет смысл. Я всегда считал, что это так из-за легенд экспертов3 о слушателях и их ссылках. – mrkishi
@MrKishi. Ну, я видел, как легенды ошибаются, даже в SO (я не имею в виду lengends саркастично, это ребята, которые делали потрясающие вещи). Во всяком случае, одной из наиболее распространенных ссылок на память и GC, вероятно, являются блоги Grant Skinner. Но если вы их прочтете, он не скажет, что добавление слушателей вызовет утечку. Он решительно выступает за отказ от слабых ссылок и хотя я могу не согласиться, его баллы действительны. Проблема в том, что многие люди просто получают эту часть и продвигаются дальше. Таким образом, у них есть упрощенное (и неправильное) понятие о том, что не удалять слушателя или не использовать слабый ref всегда будет вызывать утечки. –
@ Juan: Я не знаю, почему суета о weakrefs, а также. Во всяком случае, я никогда не использую (анонимные?) Функции. Не изменилось бы. – mrkishi