![]() |
|
||||||||||
|
|
|
|||||
|
Lorem ipsum
|
если просто null-нуть ссылки на оба экземпляра (в любом порядке) — все исчезает по GC.
__________________
Поймай яблоко 2! |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Цитата:
С тем же успехом можно свой IDestroyable написать и смысл не изменится. Буди что со экранными объектами автоматизировано их рекурсивное удаление из дисплейлиста и вызов в каждом destroy - так тоже, писать метод 5 минут. Но все остальные переменные класса все равно ручками занулять в destroy нужно. |
|
|||||
|
Регистрация: Dec 2006
Адрес: Novosibirsk
Сообщений: 93
|
Цитата:
|
|
|||||
|
Вообще то да)
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Dec 2006
Адрес: Novosibirsk
Сообщений: 93
|
ну значит никаких проблем
|
|
|||||
|
Цитата:
Цитата:
__________________
...вселенская грусть |
|
|||||
|
Глум, я написал ведь. Если 2 объекта очень "сцепленны" может быть ситуация, в которой GC будет думать что ссылки на них остались.
Хотя, эту статью где про это рассказывалось читал очень давно. Может, сейчас дела обстоят лучше.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Lorem ipsum
|
Psycho Tiger, только что проверил.
Немного измененный пример gloomyBrain: package { /** * ... * @author gloomyBrain * @mail CartoonRaccoon@gmail.com */ public class LinkHolder { private var _link:Object; public function LinkHolder() { } public function set link(link:Object):void { this._link = link; } public function get link():Object { return this._link; } } } package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class Main extends Sprite { private var a:LinkHolder; private var b:LinkHolder; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point this.a = new LinkHolder(); this.b = new LinkHolder(); this.a.link = this.b; this.b.link = this.a; stage.addEventListener(MouseEvent.CLICK, this.onClickHandler); } private function onClickHandler(e:MouseEvent):void { this.a = null; this.b = null; // запускаем GC и наблюдаем исчезновение // обоих экземпляров LinkHolder } } }
__________________
Поймай яблоко 2! |
|
|||||
|
Нет, суть не в этом. Я очень упрощенно сказал, на самом деле ссылок должно быть очень много друг-на друга и желательно больше, чем в 2 объектах. То есть 5 связанных классов, каждый с которым связан, причем больше, чем одной ссылкой.
Короче, ужасный код должен быть)
__________________
Тут мужик танцует и поёт про флэш |
![]() |
![]() |
Часовой пояс GMT +4, время: 04:41. |
|
|
« Предыдущая тема | Следующая тема » |
|
|