Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Не изобрели ли способ выяснить, что препятствует удалению объекта? (http://www.flasher.ru/forum/showthread.php?t=202692)

mikhailk 02.08.2013 11:04

Не изобрели ли способ выяснить, что препятствует удалению объекта?
 
Вроде делаю все правильно. Все листенеры чищу, таймеров изначально нет, из родителя со сцены удаляю, из массива, в котором он был учтен, удаляю, сам родитель из памяти удаляется, а этот объект как был в памяти, так и висит (смотрю через профайлер FD).

Совершенно алогичное поведение. Не появился у нас способ вытащить как нибудь информацию "я не удаляюсь, потому что..."?

КорДум 02.08.2013 11:09

Профайлер сам может ссылку задержать на объект.
А способов нет :)

mikhailk 02.08.2013 11:45

Интересно, а можно ли добраться до удаленного объекта, чтобы его опросить?

Так, в порядке бреда.

Ставим AnybodyHereQuestionDispatcher, который по определенному интервалу пускает в эфир вопрос ANYBODY_HERE. Даем ему статический инстанс (AnybodyHereQuestionDispatcher.instance), а в сам объект ставим листенер на событие ANYBODY_HERE от него. По идее, такой листенер не должен помешать удалить объект. В самом объекте по получению события ANYBODY_HERE в ответ отправляем событие I_AM_HERE с бабблзом, которое ловим на верхнем уровне и через которое заново получаем доступ к удаленному ранее объекту.

AlexLucas 02.08.2013 12:49

А как он словит ANYBODY_HERE и как вы словите I_AM_HERE если вы удалили объект отовсюду ?
Возможно через сигналы можно, но в сигнале наверное сохраняется ссылка на объект и он всё равно не удалится ?

Tails 02.08.2013 13:02

AlexLucas,
Через слабую ссылку диспетчера?
Удаляемому объекту ничто не мешает обратиться к внешним классам или вызвать трейс.

mikhailk 02.08.2013 16:06

Цитата:

А как он словит ANYBODY_HERE и как вы словите I_AM_HERE если вы удалили объект отовсюду ?
Но он-то как раз и не удалился.
Он сидит в памяти, жрет ресурс и даже, не исключаю, что-то делает. :)

И отправить ему событие I_AM_HERE (да, со всплывающим я глупость сморозил) вот таким образом вроде никто не помешает?

Код AS3:

AnybodyHereQuestionDispatcher.instance.dispatchEvent(new Event(AnybodyHereQuestionDispatcher.I_AM_HERE));

И так же слушать диспетчера внутри объекта:

Код AS3:

AnybodyHereQuestionDispatcher.instance.addEventListener(AnybodyHereQuestionDispatcher.I_AM_HERE, onDispatcherRequest);

А диспетчер будет слушать сам себя:

Код AS3:

this.addEventListener(AnybodyHereQuestionDispatcher.I_AM_HERE, onAnyObjectResponse);



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

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