On Wed, Jun 4, 2008 at 12:45 AM, Herbert König herbertkoenig@gmx.net wrote:
if you inspect this you get an inspector on an Array. To the left select any entry with a left click (on Windows) and select "objects pointing to this value". You get another inspector with an array of the objects pointing to the object you can't delete.
Again inspecting one of these objects you can see how it points to your original object. This might give you a clue. And manually deleting these references (setting them to nil in the inspector) will eventually free your original object for garbage collection.
This is helpful...and leads me to explain a little more because I was making an assumption that might not be correct...
I am writing a little arbitrary data collection application using Squeak and Aida. I can build forms with tabbed pages and add various fields, move them up and down, give them different labels, that whole thing. In short, I can create lots of objects within objects within objects.
My main classes are:
DataManager -- Manages a list of "DataAbstractors" DataAbstractor -- Manages the "DynamicRecordPage(s)" (basically groups of fields) DynamicRecordPage -- Manages "FieldDefinition(s)" DynamicRecord -- Holds the data and handles arbitrary messages based on a FieldDefinition.
I have been assuming that if I get rid of a DataAbstractor, all it's underlying objects would just "go away" as well (Pages and Records).
Do you have to explicitly remove the child objects BEFORE removing a parent object to ensure that it is removed properly?
If some of the objects you find are WeakArray or such you are in the
(to me) murky area of finalization and weak references. Squeak dev would be the place to ask.
Fortunately, these are all recognizable objects that I would expect!
You don't state the size of your problem. Is it three or is it
thousands of instances hanging around?.
Well, it is a few right now, but just grows continually as I use it! Nothing ever goes away, so I figure it will BE thousands if I don't figure this out. Every now and then I just save my project, blow it away, garbage collect, and reload everything. So far, that's the only way I can seem to get rid of anything!
I once tried the pointer finder tool but wasn't satisfied with it.
And the swiki has a page on "cleaning up junk".
RR> I still see the object I removed, even with an explicit RR> Smalltalk garbageCollect or garbageCollectMost.
RR> Anything I create seems to hang around forever.
Sometimes saving and reloading an image does a more thorough job than garbageCollect. Maybe because of the above mentioned weak references.
Thanks for your help...
Rob