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: David Melgar <email@hidden>
- Date: Sun, 22 Mar 2009 18:21:23 -0400
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
_______________________________________________
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