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