Esteban wrote:
>you also need to register the object for cleanup, in the WeakRegistry.
>(not on my machine, sorry I cannot put an example, but look around)

It is simple and here is an example:


Create a class:

  Object subclass: #Bar
        instanceVariableNames: 'id'
        classVariableNames: ''
        category: 'Foo'
        
implemented an #initialize method

  initialize
        super initialize.
        id := UUID new. 
        Transcript show: 'Initialized ', id printString; cr

and implemented a finalization method:

  finalize

        Transcript show: 'Finalized ', id printString; cr
        
Now in the workspace I instantiate the object:

   |anObject|
   Transcript open; clear.
   anObject := Bar new.
   Transcript flush.
   WeakRegistry default add: anObject.
   
and by forcing garbage collection in a second step I can 
see that the finalization method is working:

   3 timesRepeat: [ Smalltalk garbageCollect ].
   Transcript flush.
   

And I get the following output

  Initialized 4aa47ef1-0e4c-9a47-bddf-b406ee2042e4
  Finalized 4aa47ef1-0e4c-9a47-bddf-b406ee2042e4

If it doesnt work check your VM for updates.
   
I'm using Pharo4.0 Latest update: #40442 on Windows with the following VM:
Win32 built on Sep  4 2014 01:13:32 Compiler: 4.6.2 VMMaker versionString 
https://github.com/pharo-project/pharo-vm.git 
Commit: c7bc23dd6053d5f9934f7dd427537f76fc96eb32 Jenkins build #14851

Reply via email to