On Jan 4, 2010, at 11:50 AM, jonat...@mugginsoft.com wrote:

> A recent post mentioned the concept of GC memory leakage.
> 
> How is is this defined? Is it merely a failure to nil out a rooted reference?
> 
> man heap(1) makes reference to over-rooted objects.
> Are these merely objects with more than one root reference or is something 
> else afoot?

Under GC, a memory leak will fall into one of two categories:

(1) An object was CFRetain'd, but never CFRelease'd.  This is exactly like 
over-retaining an object in non-GC . Note that, in general, if you are using 
CFRetain under GC, it is only to work around a limitation somewhere or because 
of a design flaw.  If you need to use CFRetain to work around something, please 
file a bug!

(2) A hard reference to an object that isn't cleaned up.

For example, many applications have a cache somewhere, typically key/value 
pairs.   I have seen a number of these where, under non-GC, the cache never 
retained the values and was never pruned.  Because the values were never 
retained, the values in the cache were released and deallocated, leaving behind 
a dangling value with a key that would no longer ever be accessed.  In the move 
to GC, this created a leak in that the cache would often default to a strong 
reference.  Lesson; prune your caches!

It isn't so much thinking of it as a reference that needs to be nil'd out as 
much as it is a need to properly disconnect a subgraph of objects from the live 
object graph in an application such that the subgraph is collected.  That is, 
"nil'ing out references" is a fix for a symptom where the overarching problem 
is one of properly managing the connectivity of the object graph within the 
application.

b.bum
_______________________________________________

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 arch...@mail-archive.com

Reply via email to