> There is no such thing as "a reference to be created invisibly within the 
> event system".

I disagree. Try this test code:

package {
        import flash.events.Event;      
        import flash.display.Sprite;
        import flash.utils.getTimer;    
        
        public class TestClass extends Sprite {
                public function TestClass() {
                        trace("Started!");
                        var s:Sprite = new Sprite();
                        s.addEventListener(Event.ENTER_FRAME, listener);
                        addEventListener(Event.ENTER_FRAME, listener);
                }

                private function listener(event:Event):void {
                        trace(event.currentTarget.toString() + getTimer());
                }
        }
}

You'll see both event handlers fire until the end of time.  Event
references actually are kept, invisibly, within the event system.

On 3/13/08, EECOLOR <[EMAIL PROTECTED]> wrote:
> >If you add a normal event listener to a child,
>  >and then remove that child, the child is _not_ garbage collected.
>  >Objects are only garbage collected when all references to the object
>  >are removed. Adding a normal event listener causes a reference to be
>  >created invisibly within the event system.
>
>
>
> I think this is where we disagree. If a parent adds a listener to a child,
>  this means the child has a reference to the parent, not the other way
>  around. What you call the event system can be thought of as an array
>  with handler methods on the child instance. This means that if you add
>  a normal event listener to a child and then remove it, it will be
>  garbage collected. There is no such thing as "a
>
> reference to be created invisibly within the event system".
>
>
> >You can't use weak references on an anonymous event listener.
>
>
> In my last email I agreed with you on this :)
>
>
>  >You must remove all normal listeners from an object before it will be
>  >garbage collected.
>
>
> Again, I do not think this is correct. An object will be garbage collected
>  if there are no references to it. Adding listeners to an object will not
>  create references to the object itself.
>
>
>  An example (not usefull, but to illustrate the point):
>
>  package
>  {
>    class TestClass
>    {
>       public function TestClass()
>       {
>          var o:EventDispatcher = new EventDispatcher();
>          o.addEventListener(Event.COMPLETE, _handler);
>       }; // At this point o will be marked for
>  garbage collection, no references to o left.
>
>       private function _handler(e:Event):void
>       {
>       };
>    };
>  };
>
>
>  Another example (again not usefull, but to illustrate the point):
>
>  package
>  {
>    class TestHandler
>    {
>       public function TestHandler()
>       {
>       };
>
>       public function handler(e:Event):void
>       {
>       };
>    };
>  };
>
>  package
>  {
>    import flash.display.Sprite;
>
>    class TestClass extends Sprite
>    {
>       public function TestClass()
>       {
>          var o:TestHandler = new TestHandler();
>          stage.addEventListener(Event.RESIZE, o.handler);
>
>       }; // At this point o will not be marked for garbage collection, stage
>  will still have a reference to it.
>    };
>  };
>
>
>  I hope you agree on this. If not I am open to convincing arguments :)
>
>
>
>  Greetz Erik
>
>
>
>  On 3/13/08, Cory Petosky <[EMAIL PROTECTED]> wrote:
>  >
>  > >  The common use for weak event
>  > >  listeners is when adding listeners to the stage
>  >
>  >
>  > I disagree. Weak event listeners should be used in nearly all cases.
>  >
>  >
>  > >  In most cases there is actually no real benefit of creating weak event
>  > >  listeners. In most cases parents add
>  > >  listeners to their children. Children are removed and that's that.
>  >
>  >
>  > This is not correct. If you add a normal event listener to a child,
>  > and then remove that child, the child is _not_ garbage collected.
>  > Objects are only garbage collected when all references to the object
>  > are removed. Adding a normal event listener causes a reference to be
>  > created invisibly within the event system.
>  >
>  > You must remove all normal listeners from an object before it will be
>  > garbage collected.
>  >
>  >
>  > > Hmmm, if it was garbage collected, why would I remove the listener, isnt
>  > >  that the point of weak references?
>  >
>  >
>  > You can't use weak references on an anonymous event listener. The only
>  > reference to that function is in the event system itself, so if you
>  > use a weak reference, the garbage collector considers the anonymous
>  > function eligible for garbage collection. Thus, the garbage collector
>  > removes your event listener immediately, and you never get your event.
>  >
>  > (When I say "immediately," I really mean "at a random time when the GC
>  > is invoked." Sometimes that's immediate, sometimes its not, but you
>  > should assume immediacy so your code doesn't randomly break.)
>  >
>  >
>
> _______________________________________________
>  Flashcoders mailing list
>  Flashcoders@chattyfig.figleaf.com
>  http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
>


-- 
Cory Petosky : Lead Developer : PUNY
1618 Central Ave NE Suite 130
Minneapolis, MN 55413
Office: 612.216.3924
Mobile: 240.422.9652
Fax: 612.605.9216
http://www.punyentertainment.com
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to