Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-07-2005, 09:58   #1 (permalink)
... loves Japan!
 
Benutzerbild von compuboy1010
 
Registriert seit: Apr 2005
Ort: D'dorf; DE
Beiträge: 715
Array zurücksetzen?

Wie kann man ein Array zurücksetzten, so dass es Länge 0 hat?

Das Problem ist folgendes: Ich benutze ein globales Array, in das ich mittels eine Schleife Daten lade. Sagen wir 3 Daten.

arrayValues[1] = "a";
arrayValues[2] = "b";
arrayValues[3] = "c";

Eine andere Funktion geht später in einer Schleife durch dieses Array und zeigt die Daten in einem Textfeld an.

Wenn der Benutzer nun auf einen Movie klickt sollen andere Daten in das globale Array geladen werden.
arrayValues[1] = "blah";
arrayValues[2] = "blahblah";

Das Problem ist, dass die Länge des Arrays bei diesem 2. Mal immer noch 3 ist. Also arrayValues[3] = "c"; ist immernoch da und wird angezeigt.
Bei jedem Auffüllen des Arrays soll aber mit einem leeren Array begonnen werden, damit auch die Länge abgefragt werden kann. Wären immer gleich viele Daten vorhanden wäre es ja kein Problem, aber so ist es nicht.
compuboy1010 ist offline   Mit Zitat antworten
Alt 22-07-2005, 12:07   #2 (permalink)
User
 
Benutzerbild von jeypack
 
Registriert seit: Sep 2003
Ort: Essen
Beiträge: 616
Zitat:
Zitat von compuboy1010
Wie kann man ein Array zurücksetzten, so dass es Länge 0 hat?
array.splice(0);
__________________
Gruß, Jey!
jeypack ist offline   Mit Zitat antworten
Alt 22-07-2005, 12:09   #3 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Oder das Array einfach neu erstellen, dann ist das auch leer und hat die länge 0.
PHP-Code:
var myArray = new Array(); 
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 22-07-2005, 12:49   #4 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
da hab ich auch eine frage dazu:
wenn ich jetzt ein Array habe, und es mit einem blanken überschrebe, bleiben die alten daten im Speicher vorhanden?
so hab ich keinen zugriff mehr auf das erste array:
ActionScript:
  1. a = [1,2,3,4];
  2. a = [];

aber so zb schon:
ActionScript:
  1. a = [1,2,3,4];
  2. b = a;
  3. a = [];
  4. trace(b[1]);
dh. das array a bleibt trotzdem noch im Speicher, wenn ich eine andere Referenz (b) erstelle.
Bleibt es jetzt auch im Speicher wenn ich keine Referenz erstelle?
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 22-07-2005, 12:53   #5 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Zitat:
Zitat von Alphanimal
dh. das array a bleibt trotzdem noch im Speicher, wenn ich eine andere Referenz (b) erstelle.
Hallo! Wie kommste denn darauf? Es bleibt doch nicht "a" im Speicher sondern die Kopie "b"!?! Wenn du ein Blatt auf den Kopierer legst, es kopierst und dann das Original wegschmeißt, bleibt die Kopie ja trotzdem da...
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 22-07-2005, 13:17   #6 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
aber wenn man ein array einer anderen variable zuweist wird es nicht kopiert.
es wird nur eine referenz erstellt!
ActionScript:
  1. a = [1,2,3,4]
  2. b = a;
  3. a[1] = 5;
  4. trace(b[1]); //Ausgabe: 5
  5.  
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 22-07-2005, 13:24   #7 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Oh, dann habe ich ja mal gepflegt Mist erzählt .
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 22-07-2005, 15:33   #8 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
tja... aber ob das alte array im speicher bleibt oder nicht weiss ich immer noch nicht.

btw: "You found a secret :-)"
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 22-07-2005, 15:56   #9 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Zitat:
Zitat von jeypack
array.splice(0);
Hey, das wusste ich gar nicht. In der Doku sind ja auch keine eckigen Klammern um den zweiten Parameter. Vielleicht doch mal öfter lesen

mfg. r
bokel ist offline   Mit Zitat antworten
Alt 22-07-2005, 16:02   #10 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
das Array bleibt solange im Speicher, bis es vom Garbage-Collector gefunden wird. Er überprüft, ob es noch Referenzen auf ein Objekt gibt, wenn nicht, dann schmeißt er es final raus.
(so denke ich mir das zumindest)

Sauberer wäre es, (zumindest theoretisch) wenn du das Array erst mit
ActionScript:
  1. delete meinArray;
löscht.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 22-07-2005, 16:06   #11 (permalink)
Freizeitflasher
 
Benutzerbild von Alphanimal
 
Registriert seit: Jun 2004
Ort: Niederösterreich
Beiträge: 615
danke!
gört sich interessant an.
wann läuft der garbage collector?
__________________
Some Flash Worx
Alphanimal ist offline   Mit Zitat antworten
Alt 22-07-2005, 16:38   #12 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.321
garbage collecton wird vom betriebssystem ausgeführt (und nicht von java oder Pascal oder sonst wem). manche programmiersprachen c++ z.b. können diesen vorgang starten. war früher wichtiger, als man noch rechner mit 48KByte hauptspeicher hatte ;-)))

eine variable wird angelegt, das betriebssystem reserviert dafür speicher. beim löschen entstehen löcher, in die die neuen variablen nicht immer reinpassen (defragmentierung). irgendwann sagt sich des betriebssystem: 'jetzt is aber gut' und schiebt den ganzen speicherplatz zusammen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (22-07-2005 um 19:08 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 22-07-2005, 16:38   #13 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Immer nebenher, dachte ich, aber da musst du mal suchen, wenn es dich interessiert, ich glaube die Idee kommt von Java, wenn es ähnlich wie dort ist, wirst du viele Informationen finden.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 22-07-2005, 21:10   #14 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Zitat:
Zitat von Alphanimal
danke!
gört sich interessant an.
wann läuft der garbage collector?
Das hängt davon ab.
Wenn du Flash 7 und davor benutzt, kannst du den Speicher vollmüllen, bis es nicht mehr geht, und dann erst läuft der GC. Das führt dann u.U. dazu, dass deine Animationen beginnen zu ruckeln, weil der GC natürlich auch einen Haufen Rechenzeit benötigt.
Beim nächsten Flashplayer 8 soll dieser Effekt weniger stark in Erscheinung treten. Zum Teil haben sie den GC selbst wohl optimiert und zum Teil wird er wahrscheinlich einfach öfter mal aufgeruen und muss dann nicht soviel auf einmal erledigen.

@hgseib: Das Betriebssystem hat zwar auch eine Speicherverwaltung, aber die hat nur indirekt etwas mit dem Flashplayer zu tun.

mfg. r

Geändert von bokel (22-07-2005 um 22:51 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 22-07-2005, 22:29   #15 (permalink)
robo kalkühl
Gast
 
Beiträge: n/a
hm,
is jetzt zwar n bisel offtopic, aber wo ich das gerade lese drängt sich mir ne frage auf:
der garbage collector löscht je die variablen/objekte (gibt den speicherplatz frei) auf die nicht mehr verwiesen wird.
jetzt stelle man sich mal vor, da sind zwei objecte, die sich gegenseitig referenzieren, aber keine referenz von aussen auf sie zeigt, ich also auch keine möglichkeit mehr habe, auf sie zuzugreifen.
werden die auch "beseitigt"?
oder enden die als "karteileichen"?
(jetzt nicht speziell as, eher java würd mich interesieren)

praktische relevanz: wenn ich z.b. bei doppelt verketteten listen einfach die referenz auf das erste objekt lösche, wird sie dann ganz gelöscht?
bei einfach verketteten ist das ja klar, aber die doppelten....

na ja, würd mich einfach mal interesieren, falls da jemand ahnung hat..
  Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 12:48 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele