On 22 Sep 2013, at 22:44, Kyle Sluder <k...@ksluder.com> wrote:
> You're both wrong. CGImageRelease is documented to be functionally equivalent 
> to CFRelease, except for the non-NULL requirement.
> 
> The reason you can call CGImageRelease with a NULL argument is simply because 
> it doesn't do any dispatch. CFRelease dispatches through the vtable of the 
> object you hand it without checking for NULL.
> 
> I prefer to call the more specific release if I know the type of the thing 
> I'm releasing.

As far as I’ve been informed, there are two reasons why certain APIs have a 
specialized version of retain/release:

1) They weren’t CFTypes on Mac OS 9 or earlier OS X releases, and were only 
later turned into CFTypes.

2) Apparently some members of the CoreFoundation team argue that checking for 
NULL is inefficient and thus insist on CFRetain/CFRelease crashing on NULL so 
people notice when they’re not writing proper code. People on other teams 
disagree, and thus write their own versions of retain/release calls that *do* 
check for NULL to save themselves the pain.

In any case, as long as a type is documented as being a CFType, toll-free 
bridged to a Cocoa type or their retain/release calls are documented as being 
equivalent to CFRetain/CFRelease, calling the latter is safe (but check for 
NULL). If not, treat them as if they’re not CFTypes, because they definitely 
don’t fulfil the contract. Don’t put non-CFTypes in arrays/dictionaries unless 
you’re providing your own retain/release callbacks.

Anyway, pretty much everything these days is a CFType, so using the dedicated 
retains/releases in favor of CFRetain/CFRelease (or Cocoa’s -retain/-release) 
is not necessary.

Cheers,
-- Uli Kusterer
“The Witnesses of TeachText are everywhere...”
http://zathras.de


_______________________________________________

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to