Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Циклические ссылки (http://www.flasher.ru/forum/showthread.php?t=64545)

Whatsername 05.11.2004 14:30

Циклические ссылки
 
Гари Гроссман (мужчина, придумавший Action Script) пишет о неких «циклических ссылках».

Цитата:

Специальная технология позволяет освобождать память, занимаемую неиспользованными объектами, ссылающимися друг на друга.
Если не трудно, объясните мне, пожалуйста:
  • Что это за объекты ссылающиеся друг на друга?
  • Что за загадочные циклические ссылки?
  • Вообще, с кем это мужчина разговаривает?

Спасибо большое.

Antares 05.11.2004 20:42

Я так понимаю, циклические ссылки это что-то типа следующего:

Код:

var a = {variable:"A"};
var b = {variable:"B"};
var c = {variable:"C"};

var d = a;
a = b;
b = c;
c = d;

trace(a.variable);
trace(b.variable);
trace(c.variable);

Однако, для меня остается загадкой, как неиспользуемые объекты могут при этом ссылаться друг на друга... Раз есть ссылки -- значит, они как-то да используются. Компилятор будет определять, что мне нужно в проекте, а что -- нет? :D

Whatsername 07.11.2004 22:28

Наверное, циклические ссылки это что-то похитрее.
Или переводчик пятого Мука что-то нахитрил.

Antares 07.11.2004 22:44

Если скажешь главу, посмотрю в оригинальном, может, поймем, что имелось ввиду :)

Штрек 07.11.2004 23:35

Глава 15
стр.407
вроде всё там яснее ясного...

Antares 08.11.2004 06:17

Цитата:

Periodic mark-and-sweep garbage collection eliminates objects containing circular references
Ну ведь и правда все ясно, если хоть каплю с программированием знаком и знаешь, что имеется ввиду под словом "ссылка".

"Чего не сделаешь ради дословности перевода" ?

Whatsername 09.11.2004 11:01

Большое спасибо, мужчины.
Низкий поклон =))

Джа 09.11.2004 13:32

недавно Делимитер поведал мне о чудо-граблях, как раз на тему сборщика мусора и циклических ссылок.

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

суть в том, что объекты типа XMLNode, созданные в одном контейнере, и ссылающиеся друг на друга, не удаляются из памяти при удалении контейнера (что происходит с объектами других типов).

запустите этот код в стандалоун плеере, откройте таск манагер, и наблюдайте с какой скоростью увеличивается память, расходуемая приложением.
Код:

_global.x = "Jackdaws love my big sphinx of quartz...\t";
// делаем длиииинную строку
for (var i = 0; i<10; i++) {
        _global.x += _global.x;
}
//
this.onEnterFrame = function() {
        // удаляем клип тест
        test.removeMovieClip();
        // создаём клип тест
        this.createEmptyMovieClip("test", 1);
        //
        for (var i = 0; i<50; i++) {
                // создаём в клипе тест объект XMLNode
                test["node"+i] = new XMLNode(3, x);
                // ставим ссылку на объект, созданный в предыдущей итерации
                test["node"+i].link = test["node"+(i-1)];
                //
        }
};
this.onMouseDown = function() {
        // остановить
        delete this.onEnterFrame;
};

рекомендации лучших граблестроителей.

Whatsername 09.11.2004 13:39

Клева! Спасибо.

Штрек 09.11.2004 19:28

Так я и знал -
Нокса из Австралии турнули и он теперь на Ямайке... :p
Насчёт граблей - отличный вариант расплаты с недобросовестным работодателем...


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

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