There are a number of data types in the Core Foundation framework (Carbon) and the Foundation framework (Cocoa) that can be used interchangeably. This means that you can use the same data structure as the argument to a Core Foundation function call or as the receiver of an Objective-C message invocation. For example, NSLocale
(see NSLocale Class Reference) is interchangeable with its Core Foundation counterpart, CFLocale (see CFLocale Reference). Therefore, in a method where you see an NSLocale *
parameter, you can pass a CFLocaleRef
, and in a function where you see a CFLocaleRef
parameter, you can pass an NSLocale
instance. You cast one type to the other to suppress compiler warnings, as illustrated in the following example.
NSLocale *gbNSLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]; |
CFLocaleRef gbCFLocale = (CFLocaleRef) gbNSLocale; |
CFStringRef cfIdentifier = CFLocaleGetIdentifier (gbCFLocale); |
NSLog(@"cfIdentifier: %@", (NSString *)cfIdentifier); |
// logs: "cfIdentifier: en_GB" |
CFRelease((CFLocaleRef) gbNSLocale); |
CFLocaleRef myCFLocale = CFLocaleCopyCurrent(); |
NSLocale * myNSLocale = (NSLocale *) myCFLocale; |
[myNSLocale autorelease]; |
NSString *nsIdentifier = [myNSLocale localeIdentifier]; |
CFShow((CFStringRef) [@"nsIdentifier: " stringByAppendingString:nsIdentifier]); |
// logs identifier for current locale |
Note from the example that the memory management functions and methods are also interchangeable—you can use CFRelease
with a Cocoa object and release
and autorelease
with a Core Foundation object.
Note: When using garbage collection, there are important differences to how memory management works for Cocoa objects and Core Foundation objects. See Using Core Foundation with Garbage Collection for details.
Data types that can be used interchangeably are also referred to as toll-free bridged data types. Toll-free bridging has been available since Mac OS X v10.0. Table 1 provides a list of the data types that are interchangeable between Core Foundation and Foundation. For each pair, the table also lists the version of Mac OS X in which toll-free bridging between them became available.
Note: Not all data types are toll-free bridged, even though their names might suggest that they are. For example, NSRunLoop
is not toll-free bridged to CFRunLoop, NSBundle
is not toll-free bridged to CFBundle, and NSDateFormatter
is not toll-free bridged to CFDateFormatter.
© 2002, 2007 Apple Inc. All Rights Reserved. (Last updated: 2007-10-31)