On Wed, 04 Jun 2008 09:55:11 +0200, Norbert Hartl wrote:
On Wed, 2008-06-04 at 00:04 -0400, Rob Rothwell wrote:
Hello,
After much help already, I think I need some training in proper object
removal.
When my application creates an object and stores it in an
OrderedCollection, and than wants to delete it, I am trying to do so
quite explicitly with something like:
DataManager>>deleteSelectedAbstractors
self selected do: [:each |
self abstractors remove: each.
each := nil.
]
which removes the object from my application (it's collection), and
yet when I look for my object in the system with
DataAbstractor allInstances.
I still see the object I removed, even with an explicit Smalltalk
garbageCollect or garbageCollectMost. Anything I create just seems to
hang around forever.
Any help understanding what I need to do to make sure my objects
really go away when I am done with them would be greatly appreciated!
The objects are still referenced in the collection you get
from self selected. The line with "each := nil" is useless
as each is only a temporary variable.
Not 100% useless, since temporary variables (and arguments, for that
matter) survive any attempt, from within the same method, to garbage
collect them:
{'this ', 'and ', 'that'} collect: [:each | ].
Smalltalk garbageCollect.
{thisContext tempAt: 1} inspect
first line: create some object and make a temp var point to it.
second line: invoke GC.
third line: see what's still pointed to by the temp var.
/Klaus
I assume that you want
to empty the selected collection as well. you could do
DataManager>>deleteSelectedAbstractors
self selected copy do: [:each |
self abstractors remove: each.
self selected remove: each.
]
regards,
Norbert
_______________________________________________
Beginners mailing list
Beginners@lists.squeakfoundation.org
http://lists.squeakfoundation.org/mailman/listinfo/beginners