That was my understanding too. I was just asking this because in
JesterXL's earlier post, he said:
> 4. if it's a local variable, null it at the end of the function:
>
> function cow()
> {
> var a:String = "";
> a += "one";
> a += "two";
> a = null;
> }
I think this may be a paranoia practice, because they "should" go out
of scope and be cleaned up anyway.
Thunder
--- In [email protected], "Gordon Smith" <[EMAIL PROTECTED]> wrote:
>
> > // now you're saying I should null my locals...?
> > oBtn=null;
>
> There is no reason to do this. When createChildren() returns, its locals
> go out of scope and oBtn no longer holds a reference to the Button
> instance. So nulling it doesn't accomplish anything. The Button instance
> doesn't get garbage collected because its parent now has a reference to
> it, due to addChild().
>
> - Gordon
>
>
> -----Original Message-----
> From: [email protected] [mailto:[EMAIL PROTECTED] On
> Behalf Of JesterXL
> Sent: Monday, February 20, 2006 3:13 PM
> To: [email protected]
> Subject: Re: [flexcoders] Re: Object cleanup and memory usage "Best
> Practices" (2.0b1)
>
> That's striaight, yo. What you have is perfect syntactically.
>
> As for functions, yeah, AS3 solved it. In AS2, we eventually all
> started
> using mx.utils.Delegate as of the Flash MX 2004 7.2 update which
> included
> the class. Joey Lott had Proxy... there were tons of derivatives would
> all
> basically returned a function that called itself in the correct scope.
>
> AS3 now calls functions in the scope they are defined, not invoked, so
> all
> is well (no need for Delegate anymore).
>
> ----- Original Message -----
> From: "thunderstumpgesatwork" <[EMAIL PROTECTED]>
> To: <[email protected]>
> Sent: Monday, February 20, 2006 6:06 PM
> Subject: [flexcoders] Re: Object cleanup and memory usage "Best
> Practices"
> (2.0b1)
>
>
> OK, thanks.
>
> That reading and your examples cleared things up. I never declare
> functions dynamically like these examples (they're always methods
> defined on a class), and I definitely never nest function creation.
>
> One thing I do often do (for instance in a "createChildren" function
> is create a local variable (to be used as a child object), add some
> event listener, and then add it to the parent. Is code like this ok?
>
> class foo extends HBox
> {
> function createChildren():void
> {
> var oBtn:Button = new Button();
> oBtn.addEventListener("click",onBtnClick);
> this.addChild(oBtn);
>
> // now you're saying I should null my locals...?
> oBtn=null;
> }
> function onBtnClick(event:MouseEvent):void
> {
> // do whatever
> }
> } // end class foo
>
> I know for ActionScript 3 there were some changes to do with adding
> event listeners, and I've never had any problems with the scope of my
> functions; they always seem to have the scope of the object they're
> defined in.
>
> thanks,
> Thunder
>
> --- In [email protected], "JesterXL" <jesterxl@> wrote:
> >
> > Negative, local variables are good, and optimized in Flash Player 7.
> Use
> > them. This discussion is getting more boilerplate code than it
> should, but
> > if you want to know the details, I can elaborate.
> >
> > Back in Flash Player 6, MovieClips got the option to have event
> handlers
> > attached to them. That is also back when functions were executed in
> the
> > scope they were defined when called that way. Thus:
> >
> > function myOnPress()
> > {
> > }
> >
> > my_mc.onPress = myOnPress;
> >
> > the myOnPress function would run scoped to my_mc, not in relation to
> the
> > class myOnPress was defined. This was more pronounced in data
> classes like
> > XML:
> >
> > function init()
> > {
> > my_xml = new XML();
> > my_xml.onLoad = myOnLoad;
> > my_xml.load("some.xml");
> > }
> >
> > The myOnLoad function would run in the scope of XML, not in the
> scope of the
> > class. Various tricks were used to steer the scope back to the class.
> > http://www.gskinner.com/blog/archives/000069.html
> >
> > Again, I am not suggesting to not use local variables; quite the
> opposite to
> > use them. I highly suggest you do not do what the above URL suggests.
> >
> > As for delete; don't know.
> >
> > ----- Original Message -----
> > From: "thunderstumpgesatwork" <thunder.stumpges@>
> > To: <[email protected]>
> > Sent: Monday, February 20, 2006 1:50 PM
> > Subject: [flexcoders] Re: Object cleanup and memory usage "Best
> Practices"
> > (2.0b1)
> >
> >
> > Let me get this straight... did you suggest not to use local
> variables?
> >
> > "My suggestion; don't use it. And when you do (meaning you create
> > local variables)"
> >
> > What do you suggest instead? I'm not making every variable a member
> > variable...
> >
> > Thanks for the info on the Activation object. I will null out my local
> > variables at the end of the function, but it sure seems weird to
> > suggest not to use them at all!
> >
> > Also, seems like a pretty bad shortcoming not to have a deconstructor
> > or finalizer or anything. One last question, does calling delete on an
> > object release any Activation objects created for it?
> >
> > thanks,
> > Thunder
> >
> > --- In [email protected], "JesterXL" <jesterxl@> wrote:
> > >
> > > Nope. Some people used onUnload for MovieClips, but I wouldn't
> > touch that
> > > method with a 10ft-pole.
> > >
> > > From the MM docs:
> > >
> > > "The Activation object. (A temporary object that is automatically
> > created
> > > when a function is called that holds the local variables called in
> the
> > > function.)"
> > >
> > > The Activation Object can actually live on long after the function
> has
> > > finished being removed from the stack. This is an ethereal plane
> > that is
> > > useful for getting around scope challengs people had in the early
> > days of
> > > ActionScript 2 development.
> > >
> > > My suggestion; don't use it. And when you do (meaning you create
> local
> > > variables), set them to null at the end of the function.
> > >
> > > function cow()
> > > {
> > > var a:String = "moo";
> > > a = null;
> > > }
> > >
> > > ----- Original Message -----
> > > From: "thunderstumpgesatwork" <thunder.stumpges@>
> > > To: <[email protected]>
> > > Sent: Monday, February 20, 2006 12:56 PM
> > > Subject: [flexcoders] Re: Object cleanup and memory usage "Best
> > Practices"
> > > (2.0b1)
> > >
> > >
> > > Thanks for the tips. I a couple questions about your comments.
> > >
> > > - question regarding number 3,5... is there a deconstructor in
> > > ActionScript that I can place cleanup code?
> > >
> > > - number 6 what do you mean by activation object? Do you mean
> > > RemoteObject? if so, could you please explain how to clean it up
> > > properly, as I need to use it, and there was no documentation on how
> > > to clean it up.
> > >
> > > Thanks!
> > >
> > > --- In [email protected], "JesterXL" <jesterxl@> wrote:
> > > >
> > > > 6 rules of thumb:
> > > >
> > > > 1. never trust an alpha for benchmarking
> > > >
> > > > 2. never trust a beta for benchmarking
> > > >
> > > > 3. if it's a member variable, delete it:
> > > >
> > > > delete myVar;
> > > >
> > > > 4. if it's a local variable, null it at the end of the function:
> > > >
> > > > function cow()
> > > > {
> > > > var a:String = "";
> > > > a += "one";
> > > > a += "two";
> > > > a = null;
> > > > }
> > > >
> > > > 5. remove your event listeners before destroying the objects you
> > > registered
> > > > with
> > > >
> > > > 6. do not use the activation object unless you know how to clear
> it
> > > later
> > > > (most people I've seen in AS2 never do, so try not to use it
> period).
> > > > Example is xml.onLoad where the xml is created as a local variable
> > in a
> > > > function. It'll live on even though it's a local variable.
> > > >
> > > > ----- Original Message -----
> > > > From: "thunderstumpgesatwork" <thunder.stumpges@>
> > > > To: <[email protected]>
> > > > Sent: Saturday, February 18, 2006 7:02 PM
> > > > Subject: [flexcoders] Object cleanup and memory usage "Best
> Practices"
> > > > (2.0b1)
> > > >
> > > >
> > > > Hi all,
> > > >
> > > > I've been coding in Flex now for a few months (basically since
> the 2.0
> > > > Alpha came out) and I've been having a heck of a problem with
> memory
> > > > leaks.
> > > >
> > > > I was curious if there's any kind of rules or best practices to
> use
> > > > for cleaning up AS objects (destructors? finalize()? or other?)
> This
> > > > is especially pertinent because I am using lists/hash's, charts,
> and
> > > > RPC Services.
> > > >
> > > > I couldn't really find any documentation regarding clean-up and
> memory
> > > > leaks. Does anyone out there have any experiences/knowledge to
> share?
> > > >
> > > > Below, I'll outline my architecture, and note that I have no
> > > > cleanup/de-construction code right now at all, other than setting
> > > > variable references to new objects or null. Sorry it's pretty
> long, so
> > > > if you want to stop reading here and provide any ideas you have,
> feel
> > > > free =)
> > > >
> > > > thanks,
> > > > Thunder
> > > > _____________
> > > >
> > > >
> > > > Basically I am running dynamic DB queries through a singleton
> > > > RemoteObject called by a "ChartResults" class that holds the
> results
> > > > (e4x XML) of the query and metadata info related to it. I have
> > > > employed the "Asynchronous Completion Token" documented approach
> to
> > > > allow the ChartResults classes to pick out only their calls from
> the
> > > > singleton R.O.
> > > > Is this detrimental to performance if there are anywhere from
> 4-10 SQL
> > > > calls possibly going through the one RemoteObject? (note - that's
> an
> > > > upper limit during initial startup only)
> > > >
> > > > The ChartResults class caches information as it is retrieved
> from the
> > > > results (often after performing filtering/sorting, etc).
> > > >
> > > > When a new query result comes in, the I clear all the cache
> > > > items by setting the hash objects or Array to null or new
> Object/Array
> > > > respectively.
> > > >
> > > > 1 - Does setting a property referencing a Collection to null also
> > > > release the source Array held in it?
> > > >
> > > > 2 - Do I also need to set each item in the Array to null?
> > > >
> > > > 3 - If a hash Object had many different XMLList properties cached,
> > > > do I need to iterate and null all these properties using
> > introspection?
> > > >
> > > > Also, on the Chart side, I have been deleting the series array and
> > > > creating a new one when re-populating the chart (if it is showing
> > > > entirely new/different data).
> > > >
> > > > 4 - Do I need to do any cleanup of the series items maybe?
> > > >
> > > > 5 - Are the Series getting cleaned up and releasing their
> dataProvider
> > > > objects?
> > > >
> > > > Somewhere I am leaking memory badly as the number of chart queries
> > > > goes up and up...
> > > >
> > > > Thanks again!
> > > > Thunder
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Flexcoders Mailing List
> > > > FAQ:
> http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> > > > Search Archives:
> > > http://www.mail-archive.com/flexcoders%40yahoogroups.com
> > > > Yahoo! Groups Links
> > > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > --
> > > Flexcoders Mailing List
> > > FAQ:
> http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> > > Search Archives:
> > http://www.mail-archive.com/flexcoders%40yahoogroups.com
> > > Yahoo! Groups Links
> > >
> >
> >
> >
> >
> >
> >
> > --
> > Flexcoders Mailing List
> > FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> > Search Archives:
> http://www.mail-archive.com/flexcoders%40yahoogroups.com
> > Yahoo! Groups Links
> >
>
>
>
>
>
>
>
> --
> Flexcoders Mailing List
> FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> Search Archives:
> http://www.mail-archive.com/flexcoders%40yahoogroups.com
> Yahoo! Groups Links
>
>
>
>
>
>
>
> --
> Flexcoders Mailing List
> FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> Search Archives:
> http://www.mail-archive.com/flexcoders%40yahoogroups.com
> Yahoo! Groups Links
>
--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/flexcoders/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/