![]() |
|
||||||||||
|
|||||
|
Вообще то да)
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: 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 связанных классов, каждый с которым связан, причем больше, чем одной ссылкой.
Короче, ужасный код должен быть)
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Lorem ipsum
|
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; private var c:LinkHolder; private var d:LinkHolder; private var e:LinkHolder; private var f: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.c = new LinkHolder(); this.d = new LinkHolder(); this.e = new LinkHolder(); this.f = new LinkHolder(); this.a.link = this.d; this.b.link = this.c; this.c.link = this.f; this.d.link = this.b; this.e.link = this.a; this.f.link = this.e; stage.addEventListener(MouseEvent.CLICK, this.onClickHandler); } private function onClickHandler(e:MouseEvent):void { this.a = null; this.b = null; this.c = null; this.d = null; this.e = null; this.f = null; // запускаем GC и наблюдаем исчезновение // всех 6 экземпляров LinkHolder } } }
__________________
Поймай яблоко 2! |
|
|||||
|
Zebestov, а чем этот код отличается от предыдущего? a никак не связан с f. b никак не связан с d и так далее. У всех по одной ссылке.
И я повторюсь - я сам этого дела не тестил, просто давным-давно читал в статье. Это вполне могли уже пофиксить. А может автор статьи вруша. Я лишь донёс мысль, по которой стоило бы писать деструкторы с занулением переменных. Хотя бы ради перестраховки.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Lorem ipsum
|
Есть такое...
Проверил для "все ссылаются на всех, включая себя" — GC непобедим =)
__________________
Поймай яблоко 2! |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:21. |
|
|
« Предыдущая тема | Следующая тема » |
|
|