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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.01.2013, 12:46
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 21  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Цитата:
2. У s есть на него мягкая ссылка через enterFrameHandler. Она не играет роли при подсчете ссылок на объект.
Вы мне вот это объясните:
1. У s есть ссылка не на A, а на enterFrameHandler. A и enterFrameHandler - это разные объекты. Да, enterFrameHandler является приватным методом A, но тем не менее, это разные объекты, правильно я понимаю?
2. Вы утверждаете, что при удалении А, удалится и его метод enterFrameHandler (хоть он и связан с s), так?
3. Но s не удалится при удалении A, потому что он в дисплей листе, правильно?

Старый 17.01.2013, 13:00
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 22  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
A = enterFrameHandler в данном случае. Поэтому у s есть слабая ссылка на A.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 17.01.2013, 13:03
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 23  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Если это действительно так, то все становится на свои места. Хотя это специфическая инфа, которую я не встречал. Спасибо.

Старый 17.01.2013, 13:08
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 24  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
"A" ссылается на enterFrameHandler. enterFrameHandler ссылается на "A". Но на enterFrameHandler не ссылается никто из имеющих GC Root. Приходим к тому, что на "А" нет ссылок. "A" молча уходит со своими методами.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 17.01.2013, 13:17
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 25  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Вас опять не понятно. Вот эта строчка
Код AS3:
s.addEventListener(Event.ENTER_FRAME, enterFrameHandler, false, 0, true);
говорит, что на enterFrameHandler ссылается s. weak reference = true говорит о том, что enterFrameHandler будет срабатывать до тех пор, пока жив s. Или я опять туплю - когда мы вызываем addEventListener, мы связываем s и А, так что ли???

P.S.: не подумайте, что я тролль. Мне нужно докопаться до истины и сложить паззл у себя в голове.

Старый 17.01.2013, 13:40
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 26  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Или я опять туплю - когда мы вызываем addEventListener, мы связываем s и А, так что ли???
Если говорить без мягких ссылок:

a.addEventListener("typeOfEvent", b.handler)
-теперь a ссылается на метод b
-b _не_ ссылается на a
-эта связь помешает удалению b из памяти, когда на b не останется других ссылок
-эта связь никак не помешает удалению a из памяти

Если с мягкими ссылками - то "a ссылается на метод b" перестаёт учитыватся GC вот и всё.

GC удаляет объект, когда на него не осталось внешних ссылок (ссылок из дисплей-листа, ссылок из статических полей классов, и т.д.)

Ссылки от объектов, которые сами подлежат удалению GC не считаются. Что такое Объекты, которые подлежат удалению? - это объекты на которые нет ссылок объектов, _не_ подлежащих удалению.
"Чтобы понять рекурсию надо понять рекурсию"

Старый 17.01.2013, 13:43
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 27  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Stage (GCRoot) --> внутренний список детей --> [object Sprite] --> внутренний список хендлеров -x-> (enterFrameHandler --> [object A])

--> — обычная ссылка.
-x-> — мягкая ссылка.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 17.01.2013, 14:56
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 28  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Цитата:
Сообщение от Волгоградец Посмотреть сообщение
weak reference = true говорит о том, что enterFrameHandler будет срабатывать до тех пор, пока жив s.
Нет! Никакого отношения к s эта строчка не имеет. Она обозначает, что слушатель будет срабатывать до тех пор, пока живсам слушатель (а не прослушиваемый объект)! Не s (объект, на котором слушают), а метод, который слушает. При этом GC связь между s и listener не учитывает, т.е. он не считает, что s использует enterFrameHandler и может собирать функцию (и объект), если на них нет других ссылок.

Старый 17.01.2013, 15:56
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 29  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Все ясно. Всем спасибо.

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

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

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


 


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


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