thanks gordon but say if I dont remove the instance , but just want remove the event listener the removeEventListener would not work....cause the function would kept be called
On 9/14/07, Gordon Smith <[EMAIL PROTECTED]> wrote: > > > Therefore there will always be a reference to the object and GC would > not collect it. > I think you misunderstand. When you write > > <mx:Button id="myButton" click="onClick"/> > > you cause the Button instance (the dispatcher of the 'click' event) to > have a reference to the Application instance (the listener for the 'click' > event) and not the other way around. A dispatcher keeps a list of listeners, > but listeners do not remember the dispatcher that they registered with. > > If you were to do > > removeChild(myButton); > myButton = null; > > the Button would be eligible for garbage-collection because > the Application would no longer have any reference to it. > > But I doubt that you're dynamically removing components, so what kind of > leak were you worried about anyway? > > - Gordon > > ------------------------------ > *From:* [email protected] [mailto:flexcompone > [EMAIL PROTECTED] *On Behalf Of *Firdosh Tangri > *Sent:* Friday, September 14, 2007 3:32 PM > *To:* [email protected] > *Subject:* Re: [flexcomponents] Removing Events defined by MXML > > > > Well because the callback function keeps getting called even when I try to > remove the > event listener > > <mx:Application> > <mx:Script> > <![CDATA[ > private function onClick():void{ > > trace("click"); > myButton.removeEventListener(MouseEvent.CLICK , > onClick); > > } > > ]]> > </mx:Script> > > <mx:Button id="myButton" click="onClick" /> > </mx:Application> > > In the above example the onClick function keeps getting called and the > > myButton.removeEventListener (MouseEvent.CLICK , onClick); > > does not work. > > Therefore there will always be a reference to the object and GC would not > collect it. > > cheers > firdosh > > > On 9/14/07, Gordon Smith <[EMAIL PROTECTED]> wrote: > > > > I just want to mention... > > > > The name of the autogenerated event handler method for an MXML event > > attribute is an undocumented implementation detail that is subject to change > > without notice in future versions of Flex. > > > > Also, I'm curious what you're trying to accomplish by removing these > > listeners. > > > > - Gordon > > > > ------------------------------ > > *From:* [email protected] [mailto:flexcompone > > [EMAIL PROTECTED] *On Behalf Of *Firdosh Tangri > > *Sent:* Friday, September 14, 2007 9:20 AM > > *To:* [email protected] > > *Subject:* Re: [flexcomponents] Removing Events defined by MXML > > > > Hey Josh, > > thanks well I an working on a big project and a lot of > > creation complete and other mxml defined events are there > > > > I used a hack to kill the eventlistener > > > > basically just did a > > > > var comp:UIComponent = event.currentTarget as UIComponent; > > comp.removeEventListener(MouseEvent.CLICK, Application.application > > ["__btn_click"]; > > > > so there is 2 underscore , the id of the component in this case "btn" > > and then underscore again and then the event name , which is click here > > > > > > and that basically took care of the problem. > > > > cheers > > firdosh > > > > > > On 9/14/07, Josh Tynjala <[EMAIL PROTECTED] > wrote: > > > > > > As far as I know, it's not possible to remove events of this type. > > > The Flex compiler actually generates a function to wrap around whatever > > > you > > > call. You can see the exact code if you look at the generated code using > > > the > > > -keep compiler argument, but it looks something like this: > > > > > > private function someGeneratedFunctionName(event:MouseEvent):void > > > { > > > //your code gets copied here > > > onClick(); > > > } > > > > > > You can get an idea of why when you think of the fact that the "event" > > > parameter is available in your click="" attribute in the MXML. You can > > > either pass it to your function or ignore it completely. In ActionScript, > > > when you use addEventListener instead, your function must always accept an > > > event parameter. > > > > > > > > > Firdosh Tangri wrote: > > > > > > hey all, > > > I was just wondering if i define an event by mxml like > > > <mx:Button id="myBtn" click="onClick();") /> > > > > > > and then try and remove it > > > > > > private function onClick():void{ > > > trace("Click"); > > > myBtn.removeEventListener(MouseEvent.CLICK, onClick); > > > } > > > > > > it still keeps calling the function but if i add the event listener > > > through as > > > > > > like > > > > > > myBtn.addEventListener (MouseEvent.CLICK , onClick); > > > > > > then it removes the call back function. > > > > > > thanks > > > cheers > > > firdosh > > > > > > > > > > > > > > > > > > >
