You shouldn't attempt to remove object from itself - it is a bad practice, and in AS3 you can't do it for sure.
Object may be deleted (i.e. garbage collected) only if there are no references left to that object. Since references always get passed by value and object is generally not aware of which references to it exist, you can't delete object from itself. The only useful thing you can do is to create a method which will clean up all resources used by an instance. Such method will serve as a destructor, but you'll have to call it manually. Don't forget that event listeners will also prevent garbage collection unless you remove them.
There is also a difference between delete
'ing a property and setting it to null
. Effectively delete
will remove a property from an instance of dynamic class. Whereas setting property value to null
will not remove the property, but erase any reference that was stored there. Therefore both actions will destroy the reference that was stored in some property. Note, that you can't delete
an object, only a property.
There are certain hacks that can be used to initiate garbage collection in flash players 9 and older ones. However recently System.gc()
call got available, which does the same thing. Note, that you can't really rely on the fact that GC will actually be called. This is up to the flash player.
Returning to your question: throwing event and notifying parent that something went wrong is actually a good idea. You should stick to it. Moreover, it is better if parent will know of such event that way, and not when it will discover that some properties got magically nulled.
P.S.: Reading Grant Skinner articles on memory in flash player is actually a good idea.