|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Да, с первым понятно, спасибо. Повторю - я не знал, что ГЦ убивает объект, но трогает его поля.
Но как быть со вторым примером (пост 5).
__________________
http://volgogradetzzz.blogspot.ru/ |
|
|||||
.
|
Там то же самое. Ссылка на A гибнет в конструкторе Main. Для A#s листенер объявлен со слабой ссылкой, которая является последней зацепкой за GC Root. Финал понятен.
Добавлено через 1 минуту "s" как раз будет жить, гибнет A. |
|
|||||
Гибнет А и получается, что хэндлер вместе с ним. Такое возможно? Ведь на хэндлер ссылается A#s. И пускай ссылка слабая, сам же A#s то живой.
__________________
http://volgogradetzzz.blogspot.ru/ |
|
|||||
.
|
A#s живой, верно. Но на A есть только одна ссылка через метод enterFrameHandler. Он добавлен во внутренний список хендлеров объекта Sprite (s). Хендлер добавлен слабой ссылкой. Это значит, что если нет ни одной твердой ссылки на объект A, ссылка на него через enterFrameHandler не препятствует сборщику удалить этот самый A.
|
|
|||||
Цитата:
__________________
http://volgogradetzzz.blogspot.ru/ |
|
|||||
Ну так он же в дисплей листе ). Блин запутанно как то все...
__________________
http://volgogradetzzz.blogspot.ru/ |
|
|||||
.
|
Хэндлер (метод enterFrameHandler) убиться без его хозяина (объекта типа A) не может в принципе. Он является полем объекта и разлучить его с объектом мы не в состоянии. Нельзя просто так сделать delete enterFrameHandler. Убивается А, а вместе с ним и его метод enterFrameHandler. Как вы думаете, если нет объекта, может ли быть вызван его метод?
|
|
|||||
Так вроде как метод - это Function - обычный объект, наследник Object. Убился А, хозяин s, но сам то s жив, потому что на него ссылка в дисплей листе. Но ведь и на enterFrameHandler есть ссылка из s, в конце концов s и enterFrameHandler связаны... И раз уж enterFrameHandler - это обычный объект, то он то почему должен убиваться?
__________________
http://volgogradetzzz.blogspot.ru/ |
|
|||||
.
|
Чтобы объект убился необходимо чтобы не осталось на него ни одной ссылки. Еще раз...
Объект удаляется, если на него, на него, на него нет ссылок. Считайте ссылки на объект A: 1. В конструкторе создается локальная ссылка. При выходе из него она умирает. 2. У s есть на него мягкая ссылка через enterFrameHandler. Она не играет роли при подсчете ссылок на объект. Все. Коллектор удалит этот объект. Вы извините меня, но я уже не знаю как проще рассказать. |
Часовой пояс GMT +4, время: 06:01. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|