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

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

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

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Да, с первым понятно, спасибо. Повторю - я не знал, что ГЦ убивает объект, но трогает его поля.
Но как быть со вторым примером (пост 5).

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Там то же самое. Ссылка на A гибнет в конструкторе Main. Для A#s листенер объявлен со слабой ссылкой, которая является последней зацепкой за GC Root. Финал понятен.

Добавлено через 1 минуту
"s" как раз будет жить, гибнет A.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Гибнет А и получается, что хэндлер вместе с ним. Такое возможно? Ведь на хэндлер ссылается A#s. И пускай ссылка слабая, сам же A#s то живой.

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
A#s живой, верно. Но на A есть только одна ссылка через метод enterFrameHandler. Он добавлен во внутренний список хендлеров объекта Sprite (s). Хендлер добавлен слабой ссылкой. Это значит, что если нет ни одной твердой ссылки на объект A, ссылка на него через enterFrameHandler не препятствует сборщику удалить этот самый A.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Цитата:
Это значит, что если нет ни одной твердой ссылки на объект A
С тем, что А убивается коллектором я уже смирился. Но хэндлер повешен не на А. Почему этот хэндлер то убивается?

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

Регистрация: Jan 2009
Сообщений: 1,651
Так а почему бы ему не убиться, если он weak?
__________________
мой пустой блог

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

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

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от Волгоградец Посмотреть сообщение
С тем, что А убивается коллектором я уже смирился. Но хэндлер повешен не на А. Почему этот хэндлер то убивается?
Хэндлер (метод enterFrameHandler) убиться без его хозяина (объекта типа A) не может в принципе. Он является полем объекта и разлучить его с объектом мы не в состоянии. Нельзя просто так сделать delete enterFrameHandler. Убивается А, а вместе с ним и его метод enterFrameHandler. Как вы думаете, если нет объекта, может ли быть вызван его метод?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Так вроде как метод - это Function - обычный объект, наследник Object. Убился А, хозяин s, но сам то s жив, потому что на него ссылка в дисплей листе. Но ведь и на enterFrameHandler есть ссылка из s, в конце концов s и enterFrameHandler связаны... И раз уж enterFrameHandler - это обычный объект, то он то почему должен убиваться?

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

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

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

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

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


 


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


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