When it is said that the object is passed by reference versus passed by value, what is being implied is that a copy of the object is NOT being sent, but a reference instead is sent. The reference itself is STILL contained within a variable scoped to the method (the parameter). Therefore, nulling out the reference from within deleteObject() has no effect on the obj var which still contains a reference to the actual object.
The reference count should make sense if you look at it like this: When you create the object and assign it to the obj var, you have a reference count of 1. When you pass the object into the deleteObject() method, you now have a NEW reference (the parameter), so your reference count is now 2. When you null out the parameter, your reference count goes back down to 1 (the obj var is still in scope and still has a reference). Even if you didn't null out the parameter, the reference count would go back down to 1 when the deleteObject() method ends and the parameter goes out of scope. Bill --- In [email protected], Jeffry Houser <[EMAIL PROTECTED]> wrote: > > > I think you missed his point. > > He sent in obj as a parameter to a function. So objParam should be a > reference to obj; and nulling one should definitely null the other. > > I do notice that the functions in the example are not declared as > functions with the "public function" keywords. Could that be a > contributing factor to the problem? > > Roman Protsiuk wrote: > > > > > > objParam is not the same reference to created object as obj. Whenever > > you set objParam to null it becomes null (try checking it out in your > > deleteObject method). But who said the obj should become null? To > > prepare obj for garbage collection you should set obj to null. > > > > R. > > > > On 6/7/07, *Ravi Kumar Gummadi* <[EMAIL PROTECTED] > > <mailto:[EMAIL PROTECTED]>> wrote: > > > > > > Hi all > > > > How does flex handle parameter passing, as I understand, it is by Pass > > by reference. But I was having some memory leaks and playing around a > > few tweaks and the following snippet completely took me by surprise. > > > > // CODE START > > > > <script> > > > > public var obj:Object; > > > > createObject(){ > > > > obj = {test:"1234",test2:"5678"}; > > } > > > > checkObject(objParam:Object){ > > trace(objParam); > > } > > > > deleteObject(objParam:Object){ > > objParam = null; // I tried objParam = undefined as well > > } > > > > </script> > > > > <mx:Button id="create" click="createObject()" /> > > <mx:Button id="check" click="checkObject(obj)" /> > > <mx:Button id="delete" click="deleteObject(obj)" /> > > > > // END > > > > Now 1. I created the object by click on create > > 2. Then check for the existence of it (Traces [object object].. This > > is fine) > > 3. Then clicked delete. > > 4. Then again click on check... (Traces [object] [object] > > !!!!!!!!!!!!!!!!!!!!! But since its passed by reference it should be > > NULL) > > > > Somewhere I read that it setting to NULL changes the reference count, > > does that mean in each of my function I need to set all the params to > > null at the end of it so that refercne count is reduced and raady for > > garbage collection!! ( That doesn't quite a sense !!) > > > > Regards > > Ravi > > > > > -- > Jeffry Houser, Technical Entrepreneur, Software Developer, Author, > Recording Engineer > AIM: Reboog711 | Phone: 1-203-379-0773 > -- > My Company: <http://www.dot-com-it.com> > My Podcast: <http://www.theflexshow.com> > My Blog: <http://www.jeffryhouser.com> >

