Hi Dave,
Normally, you would do this in -finalize, since -dealloc will not be called
under GC.
Now, I believe (this should be confirmed...) that under GC,
NSNotificationCenter & friends automatically unregister observers when they get
collected. This is done through the weak reference machinery. It may not be
implemented for all observer pattern-based APIs though, so in some cases doing
it manually in -finalize might be required...
One critical thing to keep in mind while writing a -finalize method is to avoid
resurrection. The GC does not support that. Make sure you do not insert "self"
anywhere it could be "referenced" by a write barrier.
HTH,
Laurent
On Apr 29, 2010, at 11:33 AM, Dave Baldwin wrote:
> A common design pattern in cocoa seems to be to have a objc method along the
> lines:
>
> - (void)dealloc {
>
> // Stop observing the tool palette.
> [[NSNotificationCenter defaultCenter] removeObserver:self
> name:SKTSelectedToolDidChangeNotification object:[SKTToolPaletteController
> sharedToolPaletteController]];
>
> // Stop observing the document's canvas size.
> [[self document] removeObserver:self forKeyPath:SKTDocumentCanvasSizeKey];
>
> // memory management stuff removed...
> }
>
> - taken from the Sketch sample.
>
> One way to handle this would be to add a finalizer method to act in place of
> the the dealloc, but is this the best or correct way to handle this?
>
> Thanks,
>
> Dave.
>
>
> _______________________________________________
> MacRuby-devel mailing list
> [email protected]
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel