[Newbies] terminate event?
David Urquhart
david.urquhart at hotmail.com
Mon Jan 22 02:45:19 UTC 2007
Excellent - thanks that was exactly the sort of guidance I hoped for. Very
much appreciated.
You'll hear from me again soon :)
- Dave
>From: Bert Freudenberg <bert at freudenbergs.de>
>Reply-To: "A friendly place to get answers to even the most basic
>questionsabout Squeak." <beginners at lists.squeakfoundation.org>
>To: "A friendly place to get answers to even the most basic questions
>aboutSqueak." <beginners at lists.squeakfoundation.org>
>Subject: Re: [Newbies] terminate event?
>Date: Sun, 21 Jan 2007 15:21:24 +0100 (MET)
>
>Am Jan 21, 2007 um 14:07 schrieb David Urquhart:
>
>>Hi
>>
>>I'm a Squeak beginner. I want to write to the transcript when an object
>>is coming to life and when its terminating. I have an initialize method
>>for the birth - what is the method called that fires at death?
>
>There is no such method. A message can be send to an object only if there
>is a reference to it. As long as a reference to an object exists, it is
>not dead, it does only get garbage-collected when the last reference is
>removed.
>
>About the only thing you can do is to register a *different* object to be
>notified when one object is garbage-collected. This is called
>"finalization".
>
>>And this leads to two other questions...
>>- What is the sequence of events that occur when I create a visible
>>object like a morph - ie when does onDraw occur exactly?
>
>The world cycle is:
>
>1. process events for each hand
>2. run all step methods
>3. update screen
>4. rinse and repeat
>
>In steps 1 and 2, rectangular portions of morphs can be marked as dirty
>(by sending #invalidRect:). In step 3, drawing happens for those regions.
>
>>- What's the best way for me to answer these sorts of questions for
>>myself?
>
>By surfing the image. Smalltalk source code is like a hypertext system,
>you navigate it by browsing senders and implementors of methods. Just mark
>some chunk of source code and press Cmd-m or Cmd- n, it usually figures out
>the selector you meant.
>
>However, this only gives you a static view of course. A well-placed "self
>halt" and then navigating up the call chain is rather enlightening, too.
>Here's a recipe:
>
>Make a subclass of, say, EllipseMorph called MyMorph. Easiest to do if you
>shift-right-click on EllipseMorph in a class browser (find EllipseMorph
>class by Cmd-F in the categories list and typing "elli") and then select
>"subclass template" in the shifted menu. Actually, typing over any class
>template might be faster ;-)
>
>Anyway, then get the shifted menu of MyMorph and select "sample instance".
>You'll hold an instance of your morph in the hand. Put it somewhere.
>
>Then add a drawOn: method to MyMorph:
>
> drawOn: aCanvas
> self doOnlyOnce: [self halt].
> ^super drawOn: aCanvas
>
>"doOnlyOnce:" is essential for not getting a gazillion of debuggers. Read
>its comment to learn how to rearm it.
>
>Then click your morph, a debugger should pop up, click debug, select full
>stack, and scroll to the very bottom. You see the complete stack trace for
>the UI process, the cycle I described is in WorldState>>doOneCycleNowFor:
>
>>By the way I want to slip in a thanks to the Squeak developers and
>>community - tuning into Squeak and smalltalk has refired my inspiration
>>to create software.
>
>Glad to hear that :)
>
>- Bert -
>
>
>_______________________________________________
>Beginners mailing list
>Beginners at lists.squeakfoundation.org
>http://lists.squeakfoundation.org/mailman/listinfo/beginners
More information about the Beginners
mailing list