Flex / AS3: Wann werden Listener entfernt?

8

Ich habe ein Array von FileReference-Objekten, an die mehrere Listener angehängt sind, sollte ich jeden Listener in seiner Handler-Methode entfernen, oder sollte ich alle im vollständigen Handler entfernen?

Ich habe irgendwo gelesen, um schwache Referenzen für Listener zu verwenden, aber ich würde denken, dass es besser wäre Listener explizit zu entfernen (ja? / nein?)

%Vor%     
Ronn 24.01.2009, 22:43
quelle

2 Antworten

9

Es ist immer eine gute Idee, Ihre Zuhörer explizit zu entfernen, wenn Sie sie nicht mehr brauchen, ja, und die Art, wie Sie es tun, ist in Ordnung. Es mag ein wenig wortreich erscheinen, aber es ist immer noch eine gute Übung, und es hält Sie in der Angewohnheit, zu wissen, wo Ihre Zuhörer sind, da es nicht so oft zu Leaks und unerwartetem Verhalten führt.

Was useWeakReference betrifft, benutze ich es fast immer selbst, zusätzlich zum Entfernen unnötiger Listener. Für mich ist es eher die Regel als die Ausnahme. Wenn Sie jedoch eine auswählen mussten, entfernen Sie Ihre Listener explizit. Persönlich tue ich beides.

Tatsächlich habe ich die Anzahl der Fälle gefunden, in denen es am besten wäre, useWeakReference false zu lassen, da dies dazu führt, dass Objekte nicht als Müll gesammelt werden, ist besonders selten. In der Tat, bevor ich erfuhr, für was dieses Argument war ( Blogpost hier ), verbrachte ich eine Menge Zeit Ich kratze mich am Kopf, nachdem ich Laufzeitausnahmen bekommen habe, die vom Flex-Framework stammten und Aufrufe von Komponenten machten, von denen ich sicher war, dass ich sie aus der Anzeigeliste entfernt hatte.

Deepa Subramaniam erwähnte es schräg in ihrem Komponenten-Modell-Gespräch bei der letztjährigen MAX-Konferenz (ein ausgezeichnetes Gespräch, das es wert war) Auschecken); Ich glaube, die Art, wie sie es formulierte, war so etwas wie: "Ich weiß nicht, warum das Flash-Player-Team fälschlicherweise den Standard als falsch gewählt hat, aber in 99% der Fälle möchten Sie diesen Wert festlegen wahr. "

    
Chris Nunciato 24.01.2009, 23:00
quelle
2

Wenn Sie Objekte zu einem DisplayObject hinzufügen, würde ich empfehlen, Listener zu entfernen, wenn das Event.REMOVED_FROM_STAGE-Ereignis ausgelöst wird, und diese hinzuzufügen, wenn es zur Bühne hinzugefügt wird. Auf diese Weise können Sie sicherstellen, dass Listener entfernt werden, indem Sie die removeListeners-Funktion, die Sie geschrieben haben, explizit aufrufen müssen. Wenn zum Beispiel in Ihrem Code-Segment der Ladevorgang fehlschlägt, werden die Listener niemals entfernt.

    
Steven Baughman 06.02.2009 23:01
quelle

Tags und Links