On Sun, Oct 5, 2008 at 1:31 PM, Brian Stern <[EMAIL PROTECTED]> wrote:
>
> On Oct 4, 2008, at 11:36 PM, Michael Ash wrote:
>>
>> Absolutely not. Write your code to work with any order. In this case,
>> what you should do is write your data source to nil out the table's
>> reference to it when it goes away:
>>
>> - (void)dealloc {
>>   [tableView setDataSource:nil];
>>   [super dealloc];
>> }
>
> What prevents the tableview from being dealloced before the datasource?  In
> that case the datasource is messaging a stale pointer.
>
> I think that something higher up in the ownership graph needs to manage
> this, like the window controller.

Good point! The window controller could handle it, although that can
be annoying as it's something of a closer coupling than there maybe
should be. I'd say that in this situation, the data source ought to
retain the table view as well, which allows you to safely nil out the
table view's reference to the data source, with a -dealloc method like
this:

- (void)dealloc {
    [tableView setDataSource:nil];
    [tableView release];
    [super dealloc];
}

(And of course you would need a setter which retains it, to balance
the release.)

Mike
_______________________________________________

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to