|
20 / 20 / 3
Регистрация: 16.10.2013
Сообщений: 295
|
||||||
AS 3.0 Удаление слушателя18.11.2014, 21:23. Показов 1977. Ответов 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
Получение данных из слушателя Реализация общего слушателя Автоматическое добавление слушателя Исключения в методе слушателя Заморочка слушателя мыши Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3.
Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|