Re: Explicit release when using garbage collection with circular references
Re: Explicit release when using garbage collection with circular references
- Subject: Re: Explicit release when using garbage collection with circular references
- From: mm w <email@hidden>
- Date: Sun, 22 Mar 2009 15:37:48 -0700
Because I am like this I won't do the job for you, I will only point
you directions, that's it
Google "garbage collection", it's naive to think that's a "linear" tree.
What Bill told you is right, and my comment is following his thought
Avoiding circular refs: in 95% of cases it can be avoided, by
refactoring his work,
taking a pen and a white paper... and think
Cheers!
On Sun, Mar 22, 2009 at 3:21 PM, David Melgar <email@hidden> wrote:
> I'm confused. Bill said that the garbage collection will correctly handle
> releasing these types of objects despite the circular references. Therefore
> it appears that no additional actions are required since I am using garbage
> collection.
>
> What is your approach trying to solve?
> I certainly don't follow your reply. Google for what?
> Naive in what way?
> Avoid circular refs by a "proper" design? Ok... what is "proper"?
>
> Generally your message alludes to many things yet provides little
> information.
>
> On Mar 22, 2009, at 5:53 PM, mm w wrote:
>
>> I changed my mind, when I was writting this
>>
>> - (void)sendSharedMessage:(NSString *)msg
>> {
>> NSString *print = [[[NSString alloc] initWithFormat:@" %@",msg]
>> autorelease];
>>
>> NSLog(@" %@", print);
>> }
>>
>> anyway it doesn't change the background
>>
>>
>> On Sun, Mar 22, 2009 at 2:47 PM, mm w <email@hidden> wrote:
>>>
>>> Hello David,
>>>
>>> your garbage collection approach is a bit naive, but not everything
>>> is wrong, you can make a google search, it will point you good
>>> resources anyway,
>>>
>>> @implementation AppDelegate
>>>
>>> - (void)sendSharedMessage:(NSString *)msg
>>> {
>>> return [[[NSString alloc] initWithFormat:@" %@",msg] autorelease];
>>> }
>>>
>>> @end
>>>
>>>
>>> @implementation MyObject
>>>
>>> - (void)aMathod
>>> {
>>> id sharedController = [[NSApplication sharedApplication] delegate];
>>>
>>> if ([[sharedController class]
>>> instancesRespondToSelector:@selector(sendSharedMessage:)]) {
>>> NSString aMsg = [[NSString alloc] initWithString:@"hello"];
>>> [sharedController performSelector:@selector(sendSharedMessage:)
>>> withObject:aMsg];
>>> [aMsg release];
>>> }
>>>
>>> }
>>>
>>> @end
>>>
>>> (sorry if there is synthax errors this is a live code)
>>>
>>> this model will apply with/or without garbage collection, release
>>> autorelease will be ignored in garbage collection env, avoid "as far
>>> is possible" circular refs by a proper design.
>>>
>>> On Sat, Mar 21, 2009 at 9:16 PM, Bill Bumgarner <email@hidden> wrote:
>>>>
>>>> On Mar 21, 2009, at 9:11 PM, David wrote:
>>>>>
>>>>> Is there any issue issuing explicit release when using garbage
>>>>> collection with Leopard and Obj-c 2.0?
>>>>
>>>> -release is ignored entirely.
>>>>
>>>> CFRelease() work as it always does, and balances CFRetain() nicely.
>>>>
>>>> But that isn't the issue.
>>>>
>>>>> I've become aware that I have lots of memory not being freed within my
>>>>> application. I presume this is because its a tree structure with
>>>>> parent child pointers between the objects. If I drop the last
>>>>> reference to the tree, I presume the tree does not get garbage
>>>>> collected because each object has circular pointers between them, ie
>>>>> parent has references to children and each child has a reference to
>>>>> its parent. In this case, it seem that the appropriate course of
>>>>> action would be to call a specific method to forcibly release each
>>>>> node in the tree.
>>>>> Is this the proper approach?
>>>>> Should garbage collection somehow work anyway?
>>>>
>>>> That would be an incorrect presumption. The garbage collector handles
>>>> complexly connected, but not rooted, graphs just fine. Your sub-graphs
>>>> --
>>>> trees -- of objects that are no longer referenced by your rooted object
>>>> graphs should be reaped without a problem.
>>>>
>>>> So, something else is going on.
>>>>
>>>> Have you used 'info gc-roots' to see what is causing the items within
>>>> your
>>>> tree to stick around?
>>>>
>>>> b.bum
>>>>
>>>> _______________________________________________
>>>>
>>>> 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
>>>>
>>>
>>>
>>>
>>> --
>>> -mmw
>>>
>>
>>
>>
>> --
>> -mmw
>
>
--
-mmw
_______________________________________________
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