Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Массив со ссылками на объекты в памяти (http://www.flasher.ru/forum/showthread.php?t=202551)

Universe 22.07.2013 20:24

Массив со ссылками на объекты в памяти
 
Код AS3:

public static var settings:Object;
public static var info:Object;
private var data:Array = [settings, info];

Не могу понять, почему когда я изменяю значения на прямую - они не меняются в массиве data? Почему флеш создаёт независимые объекты внутри массива? Это же объект и я думал что при присваивании его другой переменной будет создана ссылка на этот объект в памяти, а не новый объект. Так или иначе, как мне создать именно ссылку на объект в памяти, которая будет хранится в массиве, а не новый независимый объект, который продублирует текущее состояние независимого объекта?

Aquahawk 22.07.2013 20:47

Да ссылки, никто новых не создавал.
Но вот меняете вы не settings.что_нибудь, а пишете settings = чегонить. Естественно в массиве лежит ссылка на старый объект, а в переменной новая ссылка. Ссылка в переменной и массиве в данном случае равнозначны. Это именно ссылки на объект в каком-то месте. И не в массиве и не в переменной, куча это место называется. Вот вы видимо и создаёте сами ручками новый объект и присваиваете ссылку на него в переменную, в массиве естественно ссылка на старый объект.
Это мои телепатические догадки. Если я не прав, то покажите минимально достаточную демонстрацию, с трейсами что не так.

Universe 23.07.2013 13:07

Собственно - расширенный вариант:
Код AS3:

public static var settings:Object;
public static var info:Object;
static public const DATA_LOADED:String = "dataLoaded";
 
private var data:Array = [settings, info];
...............
 
private function infoLoaded(result:Object):void
                {
                        info = result;
                        //data = [settings, info];
                        dataLoaded();
                        trace("Описание загрузилось", Data.settings);
                }
 
                private function settingsLoaded(result:Object):void
                {
                        settings = result;
                        //data = [settings, info];
                        dataLoaded();
                        trace("Настройки загрузились", Data.settings);
                }

Если я не переприсваиваю data в массиве по прежнему остаются null

FlashRus 23.07.2013 13:15

Всё верно, т.к. Вы берёте совершенно другой Object и ссылку на него кладёте в settings, а так как в массиве лежит ссылка на старый settings (который null), то и результат Вы не наблюдаете.

AlexCooper 23.07.2013 13:26

как минимум нужно settings и info проинициализировать
Код AS3:

= new Object()

а
Код AS3:

info = result;

заменить скажем на
Код AS3:

info.data = result;



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

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