In my arc app I dispose of observers in -dealloc.
The pattern I have established seems to work well but one case has me 
rethinking my approach.
Everything pivots around NSViewController -representedObject;

- (void)setRepresentedObject:(id)object
{
        if (self.representedObject) [self removeObservers];
        [super setRepresentedObject:object];
        if (self.representedObject) [self addObservers];
}

- (void)dealloc
{
        if (self.representedObject) [self removeObservers];
}

In my query case I have subclassed NSTableCellView. The principle is the same, 
but the signatures now are:

- (void)setObjectValue:(id)object
{
        if (self.objectValue) [self removeObservers];
        [super setObjectValue:object];
        if (self.objectValue) [self addObservers];
}

- (void)dealloc
{
        if (self.objectValue) [self removeObservers]; 
}

Crucially I find that in this case after my subclass -dealloc the superclass 
-dealloc calls -setObjectValue : nil which causes observation warnings to be 
issued (I always try and clear these types of issues because at the very least 
they mask real problems) as _objectValue will still be non nil and [self 
removeObservers] gets called again.

Is it normal for superclasses to message during dealloc?
I could be triggering any sequence of non dealloc friendly actions as a result 
of the call to -setObjectValue:.

Obviously I can use another property to track whether observations have been 
removed but that is just more glue.

Perhaps I just need to treat NSTableCellView as a special case and get out the 
belt and braces?

Thanks

Jonathan














_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to