Re: NSTreeController and object retain counts
Re: NSTreeController and object retain counts
- Subject: Re: NSTreeController and object retain counts
- From: "Mads Paulin" <email@hidden>
- Date: Mon, 9 Nov 2009 14:16:25 +0100 (CET)
- Importance: Normal
Hi Andy,
Thank you for your input.
I did actually try to exchange the OutlineView with a TableView and the
TreeController with an ArrayController and the problem went away meaning
that all elements in the collection was correctly dealloced when calling
remove:sender on the controller.
What strikes me as odd is that all Nodes in the document array are created
and removed directly via the add and remove actions on the treecontroller.
- I dont have a single "external" access to these objects. I would hence
expect the controller to "clean up after itself".
Lets hope there is a couple of NSTtreeController gurus on this list who
are able to explain the problem.
Regards,
Mads
> On Nov 9, 2009, at 6:31 AM, Mads Paulin wrote:
>> Hi,
>>
>> Yes my Document class releases the array in its dealloc method and
>> all Node
>> objects in the array are properly dealloc'ed when deallocing the
>> document.
>>
>> However, I think the problem is unrelated to the retaining of the
>> array
>> member of the document class but rather to the retaining of elements
>> added
>> to the array via NSTreeControllers add:sender and remove:sender class.
>
> Yes, this is how I understood your problem.
>
>>
>> Adding a node object through this method creates a node object in the
>> document array member with a retain count of 2. The remove:sender
>> method
>> correctly removes the object from the document's array
>
> This is the first thing I was going to suggest checking -- whether the
> object is actually removed from the array. Since it is...
>
>> but only decrements
>> the node object's retain count to 1 - meaning that the objects are
>> never
>> dealloc. As I see it, this is a memory leak in NSTreeController as
>> all "my"
>> external references to the Node objects are lost.
>
> I've never used NSTreeController but something in the doc for add:
> struck me as odd:
>
> "If the receiver is in object mode newObject is called and the
> returned object is added to the collection."
>
> Since newObject returns a retained object, if this is the literal
> sequence of events (call newObject, then add to collection), it sure
> seems like a memory leak to me. Or arguably not, since the sequence
> of events is documented, but then it's a serious API inconsistency,
> since AFAIK NSArrayController doesn't have the same issue.
>
> I do know NSTreeController is a frequently-complained-about class. If
> this is the issue you're running into, surely someone who's dealt with
> it more extensively should be able to either confirm the issue or say
> it's a red herring (in which case it's a documentation bug).
>
> --Andy
>
>
>>
>> Thanks,
>> Mads
>>
>>
>>
>>> Mads Paulin wrote:
>>>
>>>> #import <Cocoa/Cocoa.h>
>>>>
>>>> @interface MyDocument : NSDocument
>>>> {
>>>> NSMutableArray *array;
>>>> }
>>>>
>>>> @property (readonly) NSMutableArray* array;
>>>>
>>>> @end
>>>>
>>>> All I changed in the doc impl is
>>>> @synthesize array
>>>> and
>>>> array =[ [NSMutableArray]alloc init]; in the init method.
>>>
>>>
>>> Does your MyDocument implementation ever release array? If not, then
>>> what happens to the NSMutableArray and what it contains when
>>> MyDocument is dealloc'ed? I don't think @synthesize will synthesize
>>> any cleanup for you.
>>>
>>> -- GG
>>> _______________________________________________
>>>
>>> Cocoa-dev mailing list (email@hidden)
>>>
>>> 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:
>>>
>>> This email sent to email@hidden
>>>
>>
>> _______________________________________________
>>
>> Cocoa-dev mailing list (email@hidden)
>>
>> 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:
>>
>> This email sent to email@hidden
>
>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden