Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.09.2012, 14:23
AndreyD вне форума Посмотреть профиль Отправить личное сообщение для AndreyD Найти все сообщения от AndreyD
  № 1  
Ответить с цитированием
AndreyD

Регистрация: May 2012
Сообщений: 24
Cool Функция удаления переменных и тп. Кто как делает?

Мучает вопрос по поводу удаления всех слушателей и переменных, которые уже не нужны.
Конкретная ситуация: Есть класс, экземпляр которого делает кучу слушателей и переменных. Когда пользователь понажимал вдоволь по кнопочкам в итоге нажимает кнопку закрыть, в этот момент у меня экземпляр класса удаляется со сцены и делается null.

Очень беспокоит всё содержимое того экземпляра, в том числе слушатели и переменные, что с ними?
Я для надёжности пытаюсь прикрутить функцию, которая будет чистить всё перед удалением со сцены и заnullением экземпляра, но всё какая-то лажа получается.

Поделитесь опытом, что вы делаете в таких ситуациях?

Старый 06.09.2012, 14:33
DaFive вне форума Посмотреть профиль Отправить личное сообщение для DaFive Посетить домашнюю страницу DaFive Найти все сообщения от DaFive
  № 2  
Ответить с цитированием
DaFive
 
Аватар для DaFive

Регистрация: May 2008
Адрес: {0,0}
Сообщений: 754
Записей в блоге: 1
Отправить сообщение для DaFive с помощью ICQ
Надо отписываться от всех событий и занулять ссылки перед удалением.
Можно написать свой эвентМенеджер, через который будете добавлять события чему-либо и через который будете отписывать от всех событий (к примеру функа removeAllListeners). Ну, ссылки не забыть удалить тоже.
__________________
Кодинг, багинг, алгоритминг. me @

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

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Надо отписываться от всех событий и занулять ссылки перед удалением.
Это не так. Например, если мы подписываемся на события ненужного (предполагаемого к сносу) объекта, то это его в памяти не задержит (главное чтобы он во время ожидания сноса их не слали проц тем самым не грузил). Подписка на себя самого тоже для GC не помеха.

Цитата:
Можно написать свой эвентМенеджер, через который будете добавлять события чему-либо и через который будете отписывать от всех событий (к примеру функа removeAllListeners). Ну, ссылки не забыть удалить тоже.
Для какого-то частного случая это будет работать. В общем случае это только усложнит код и увеличит сложность

Старый 06.09.2012, 14:43
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 4  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Я имплементирую всем таким классам интерфейс IDisposable (кастомный, естественно) с методом dispose(). Реализовываю удаление слушателей и уничтожение всего и вся именно в нем.
Цитата:
в этот момент у меня экземпляр класса удаляется со сцены и делается null.
А перед этим нужно вызвать dispose()
__________________
тут я

Старый 06.09.2012, 14:52
AndreyD вне форума Посмотреть профиль Отправить личное сообщение для AndreyD Найти все сообщения от AndreyD
  № 5  
Ответить с цитированием
AndreyD

Регистрация: May 2012
Сообщений: 24
Такс расклад примерно понятен, теперь для гугла готов нормальный запрос, для изучения подробностей вышесказанного))

Старый 06.09.2012, 17:29
Hidest вне форума Посмотреть профиль Отправить личное сообщение для Hidest Найти все сообщения от Hidest
  № 6  
Ответить с цитированием
Hidest
 
Аватар для Hidest

Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
Цитата:
Сообщение от КорДум Посмотреть сообщение
Я имплементирую всем таким классам интерфейс IDisposable (кастомный, естественно) с методом dispose(). Реализовываю удаление слушателей и уничтожение всего и вся именно в нем.

А перед этим нужно вызвать dispose()
Делаю один в один так же! В одном информационном поле находимся

Старый 06.09.2012, 19:30
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Делаю один в один так же! В одном информационном поле находимся
+1. Тоже точно так же делаю
и интерфейс IDisposable и метод dispose()
плюс если у меня это дисплей объект, то он сам себя еще и удаляет из родителя
Код AS3:
if (parent) parent.removeChild(this);
Так что в том месте, где вызыван метод dispose() на этом экземпляре достаточно только занулить ссылку на него после вызова

Старый 06.09.2012, 22:50
Korchy вне форума Посмотреть профиль Отправить личное сообщение для Korchy Найти все сообщения от Korchy
  № 8  
Ответить с цитированием
Korchy
 
Аватар для Korchy

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
Цитата:
Сообщение от caseyryan Посмотреть сообщение
+1. Тоже точно так же делаю
Я тоже. Только у меня метод называется _delete() и я без интерфейса оверрайдю его в каждом классе.
Вообще не очень понятно, почему бы адобовцам не сделать нормальный деструктор. Конечно сборщик мусора дело хорошее, но деструктор нужен, хотябы чтобы освободить объект от лишних ссылок.
__________________
interplanety

Старый 06.09.2012, 22:56
TanaTiX вне форума Посмотреть профиль Отправить личное сообщение для TanaTiX Найти все сообщения от TanaTiX
  № 9  
Ответить с цитированием
TanaTiX
 
Аватар для TanaTiX

блогер
Регистрация: Feb 2008
Сообщений: 1,453
Записей в блоге: 4
Цитата:
сам себя еще и удаляет из родителя
Объект-камикадзе, забавно. Помню холивары на эту тему на форуме. Для вас сразу "отрезюмирую": объектами должны управлять родители, скажем "НЕТ!" суициду, убивать детей надо правильно.
__________________
Ну все, теперь Забава м-о-я.
Гы-гы, а корабль мой!

Старый 07.09.2012, 08:07
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 10  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Для вас сразу "отрезюмирую": объектами должны управлять родители, скажем "НЕТ!"
Еще один холивар разводите? )

Нет, я с этим не согласен. Если для объекта вызывается метод dispose(), как правило там, где он создан, значит объект должен быть уничтожен, это же очевидно. На кой его еще и удалять с дисплей листа там же? Лишняя заморочка. Не вижу тут логики. Объект может удалять сам себя, и это нормально.
А если метод dispose() оверрайдится, а удаление с дисплей листа происходит в суперклассе? Это избавляет от необходимости каждый раз писать код удаления. Я этот вопрос для себя уже давно отрезюмировал.
Цитата:
Вообще не очень понятно, почему бы адобовцам не сделать нормальный деструктор. Конечно сборщик мусора дело хорошее, но деструктор нужен, хотябы чтобы освободить объект от лишних ссылок.
Тоже задумавылся над этим вопросом. Но, видимо, не правильно это, избавлять объект от ссылок автоматически. Надо делать правильную архитектуру, чтобы потом не вылезало непонятных багов из-за того, что ссылки на объект убились автоматически, а он еще где-то используется

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:58.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 02:58.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.