views:

104

answers:

3

I'm making a rather large flash project and so I'm concerned about memory usage. At the end of each section of the application I remove the overarching parent element that holds the content. Although this remove the parent, does this also free up the memory for each of the children contained within this, or should I run an iteration to remove those prior to removing the parent?

I'll give a little more explanation in-case I'm not expressing what I want:

addChild(movie1);
movie1.addChild(movie2);
movie1.addChild(movie3);

By using this code:

removeChild(movie1);

Does it remove movie2 and movie3 from memory or are they still stored, just unlinked?

A: 

Ofcourse it removes all of the 3.

Child movie 1 has two children, movie2 + 3. If he dies because of some Instance decease the children will possibily die too.

Maybe I'm wrong but you can also try:

trace(movie2);
Jordy
It's not of necessity that there are removed, because they could always be referenced by another object.
splash
I don't think performing `trace(movie2);` is relevant as you don't know when the garbage collector will run and "delete" movie2.
David
+3  A: 

If movie2 and movie3 aren't referenced anymore by another object, they should be garbage collected. The same applies for movie1.

From Creating visual Flex components in ActionScript :

To programmatically remove a control, you can use the removeChild() or removeChildAt() methods. You can also use the removeAllChildren() method to remove all child controls from a container. Calling these methods does not actually delete the objects. If you do not have any other references to the child, Flash Player includes it in garbage collection at some future point. But if you stored a reference to that child on some object, the child is not removed from memory.

splash
I agree, and highly recommend downloading and watching the presentation you can find here : http://blogs.adobe.com/aharui/2007/03/garbage_collection_and_memory.html. It is a bit old but explains garbage collection mechanism very well.
David
A: 
PatrickS
So the answer is that yes, if I want to remove it completely from Memory, I have to remove all child elements and THEN it's parent element to keep the application tight
Daniel Hanly
PatrickS