Yes, adding it to the weak registry does the trick! Thank you Esteban for the 
pointer and Torsten for the magic line of code WeakRegistry default add: 
anObject.

Being able to hook into the GC in this way is extremely cool, it saves me a lot 
of housekeeping work and I am very happy because of that ! 

> On Jan 13, 2015, at 17:35, Torsten Bergmann <asta...@gmx.de> wrote:
> 
> 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
> 



---> Save our in-boxes! http://emailcharter.org <---

Johan Fabry   -   http://pleiad.cl/~jfabry
PLEIAD lab  -  Computer Science Department (DCC)  -  University of Chile


Reply via email to