|
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
|
||||||
AS 3.0 Удаление слушателя18.11.2014, 21:23. Показов 1932. Ответов 24
Метки нет (Все метки)
Есть у меня некий класс, структура такая:
0
|
||||||
| 18.11.2014, 21:23 | |
|
Ответы с готовыми решениями:
24
Как грамотно поставить слушателя на функцию? Ошибка слушателя SWT: Удалить слушателя |
|
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
|
|
| 18.11.2014, 21:25 | |
|
Круто!
Он и так удалится, контекст, то есть, таргет остается тот же.
0
|
|
|
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
|
|
| 18.11.2014, 21:28 [ТС] | |
|
Или гарбейдж коллектор сам нормально почистит висяковый слушатель?
0
|
|
|
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
|
|
| 18.11.2014, 21:31 | |
|
Висяк удалит, если Вы удалите класс PLATFORM_KILL
0
|
|
|
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
|
|||
| 18.11.2014, 21:36 [ТС] | |||
|
Добавлено через 1 минуту
0
|
|||
|
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
|
|
| 18.11.2014, 21:39 | |
|
Если экземпляр не удаляется, значит и слушатель не удаляется и его нужно вручную.
А советуют так, потому лучше все самому контролировать, чем полагаться на незнание.
0
|
|
|
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
|
||
| 18.11.2014, 21:43 [ТС] | ||
Как адекватно подчистить этот слушатель, если сам класс на сцену не добавляется, класс сам по себе просто создает тела физ движка Box2d. Удалять екземпляр не выйдет, так как таких екземпляров несколько десятков на уровне (платформы) и переменных ссылающих на эти экземпляры нету.
0
|
||
|
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
|
|
| 18.11.2014, 21:48 | |
|
Вы уже его удаляете.
Или явно удаляйте с event.target
0
|
|
|
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
|
||
| 18.11.2014, 22:09 [ТС] | ||
|
Добавлено через 2 минуты Интересная деталь со справки: Параметр useWeakReference позволяет указать, является ли ссылка на функцию прослушивателя слабой или нормальной. Выбор значения true для этого параметра позволяет избежать ситуаций, при которых функции прослушивателя остаются в памяти, хотя они уже больше не нужны. Flash Player и AIR используют метод «сбора мусора», чтобы убрать из памяти объекты, которые больше не используются. Объект считается неиспользуемым, если на него больше не содержится ссылок. Сборщик мусора не учитывает слабые ссылки. Это означает, что функция прослушивателя, на которую указывает только слабая ссылка, имеет право быть подвергнутой «сбору мусора». Мой пример является слабой ссылкой или что такое слабая ссылка?
0
|
||
|
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
|
||
| 18.11.2014, 22:19 | ||
|
Ваш пример не является. Вы же сами написали
Я могу сказать только одно - если Вас не волнуют ссылки на объекты и их судьба, то не замарачивайтесь о слушателях, запорите одно-два приложения и возможно потом до Вас дойдет, что все правила и советы придумали не просто так.
0
|
||
|
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
|
|||||||||||||
| 18.11.2014, 22:26 [ТС] | |||||||||||||
|
Я правильео понимаю, что любой екземпляр созданый
0
|
|||||||||||||
|
Модератор
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
|
|
| 18.11.2014, 22:30 | |
|
Wells77, а как вы удаляете объект, если не имеете на него явной ссылки? Просто removeChild? Если это единичный объект уровня, так можно и ссылку сохранить - тогда будете удалять его целенаправленно, а раз будет ссылка, то можно будет и метод создать для чистки слушателей.
Ну и да, можно использовать useWeakReference.
0
|
|
|
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
|
||
| 18.11.2014, 22:49 [ТС] | ||
|
Добавлено через 11 минут Вобщем я так понимаю, наверное нада заморочится и загнать все экземпляры new при создании в массив, прописать для каждого з таких похожих классов паблик функцию деструктора, где слушатели удаляться будут. Потом при выходе или рестарте уровня обойти сначала весь массив, вызвав для каждого элемента ф-цию деструктора и очистить в конце сам массив и прировнять до null. Или есть поинтереснее советы?
0
|
||
|
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
|
|
| 18.11.2014, 23:11 | |
Сообщение было отмечено Wells77 как решение
Решение
Понимаете, если на объект на котором висит слушатель, ничего не держит,
то он удалится и удалит слушатель. Но это произойдет только в том случаи если внутри этого объекта не сохранен объект, на которого существует ссылка. В объекте В сохранена ссылка на объект А, на который ссылка есть в объекте С. На В ссылок нет, но его удалить нельзя, так как на объект А ссылка есть и если удалить В, то и А удалится и по этому gc себе этого не позволит. Теперь о слушателе, он находится внутри объекта В и если удалить объект А, то на объект В больше ссылаться никто не будет и он удалится вместе со слушателем. От useWeakReference мне кажется в данном случаи нет смысла я вообще не понимаю этот параметр... По идее, он должен работать так, что если я в В подписал не сохраненный в нем объект А c указанием слабой ссылки, то при удалении объекта В, он бы не держался на слушателе, а удалился бы. Стало Вам ясно что нибудь из сказанного?) Наверное нет, так как это нужно в голове представлять. Когда знаешь, то представляется, а когда нет, то просто головоломка какая-то.
0
|
|
|
Модератор
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
|
||
| 18.11.2014, 23:19 | ||
|
Не по теме:
Wells77, а действительно есть необходимость создавать слушатели в каждом из объектов, да еще и включая те, которые не добавляются на сцену?
0
|
||
|
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
|
||||||
| 18.11.2014, 23:33 [ТС] | ||||||
|
Вот что я понял, надеюсь правильно. Скину для наглядности весь код моего класса и попробую обьяснить что понял:
Экземпляр new PLATFORM_KILL() с 1 слушателем удалится сам благодаря ГК только в том случае, если: 1)_bodyDef==null 2)_body==null 3)_shape==null 4) if (obj.fire) то и _mc==null Вобщем пока хоть 1 переменная внутри экземпляра PLATFORM_KILL() не будет равна null, коллектор не удалит его. В виду того, что можна запутаться и не всегда быть уверенным что все переменные будут ссылаться на null, правильно и рационально делать функции деструкторы для всех классов, где удаляются все слушатели даного экземпляра и сам екземпляр. Я правильно понял???
0
|
||||||
|
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
|
|
| 18.11.2014, 23:38 | |
|
Вам нужно о областях видимости почитать в книге и тогда Вы поймете,
как ведут себя переменные. Я не смогу объяснить лучше чем в книге.
0
|
|
|
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
|
|||
| 18.11.2014, 23:43 [ТС] | |||
|
Добавлено через 1 минуту ?
0
|
|||
|
34 / 34 / 3
Регистрация: 17.05.2014
Сообщений: 144
|
||
| 18.11.2014, 23:53 | ||
|
что-то опасно. Но главное не писать, как некоторые "что я обижаю", а достойно отреагировать прочтением пару глав книги и конвенций по коду as3 и после вернуться сюда, чтобы прочесть все ещё раз и уже потом уточнять.
0
|
||
|
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
|
|
| 19.11.2014, 00:02 [ТС] | |
|
Абсолютно нормально воспринимаю критику. Уже откопал пару статеек о области видимости, завтра займусь прочтением. Но все-же, неужели я неправильно понял, что объект удалится только в том случае, когда переменные внутри его будут все ссылаться на пустое место (null)?
0
|
|
| 19.11.2014, 00:02 | |
|
Помогаю со студенческими работами здесь
20
Получение данных из слушателя Реализация общего слушателя Автоматическое добавление слушателя Исключения в методе слушателя Заморочка слушателя мыши Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|