On Fri, Mar 13, 2009 at 2:03 PM, Paul Sanders <p.sand...@dsl.pipex.com> wrote:
>> Without any sort of management, you'd leak memory like
>> crazy in situations where neither the caller or the callee can release
>> the object.
>
> A scheme where it is always the caller's job to release any object returned
> to it is perfectly viable, as any number of other computing platforms (such
> as COM on Windows) will testify.  The callee simply has to retain the object
> before it returns it (and autorelease pools would not exist - hooray!).
> Cocoa is one of a kind in this regard, as far as I know.

No need to look to Windows, OS X's own CoreFoundation has this kind of
memory management: manual refcounting, no autorelease.

It does indeed work. It's also tremendously verbose. What would be a
simple one-liner in Cocoa turns into a sprawling mess of code due to
the need to release temporary objects.

Worse, it forces the API to expose implementation details. When
there's a Get function (one which returns an object you don't own) in
CF-land, that means that whatever you're calling necessarily retains a
reference to it. If Apple later on wants to change how it works
internally so that the function returns a temporary object instead,
well, too bad, can't! In Cocoa, the existence of autorelease allows
the interface's ownership semantics to be fully separated from the
implementation.

I'll agree that no-autorelease refcounting is viable, as is proven by
many implementations, but I'll also argue that autorelease adds
significant capabilities to the system.

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

Reply via email to