There are a number of data types in the Core Foundation framework and the Foundation framework that can be used interchangeably. This capability, called toll-free
bridging, means that you can use the same data type as the parameter to a Core Foundation function call or as the receiver of an Objective-C message. 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.
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.
Toll-free bridging has been available since Mac OS X v10.0. Table
13-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.
Table
13-1 Data types that can be used interchangeably between Core Foundation and Foundation
Core Foundation type
Foundation class
Availability
CFArrayRef
NSArray
Mac OS X v10.0
CFAttributedStringRef
NSAttributedString
Mac OS X v10.4
CFCalendarRef
NSCalendar
Mac OS X v10.4
CFCharacterSetRef
NSCharacterSet
Mac OS X v10.0
CFDataRef
NSData
Mac OS X v10.0
CFDateRef
NSDate
Mac OS X v10.0
CFDictionaryRef
NSDictionary
Mac OS X v10.0
CFErrorRef
NSError
Mac OS X v10.5
CFLocaleRef
NSLocale
Mac OS X v10.4
CFMutableArrayRef
NSMutableArray
Mac OS X v10.0
CFMutableAttributedStringRef
NSMutableAttributedString
Mac OS X v10.4
CFMutableCharacterSetRef
NSMutableCharacterSet
Mac OS X v10.0
CFMutableDataRef
NSMutableData
Mac OS X v10.0
CFMutableDictionaryRef
NSMutableDictionary
Mac OS X v10.0
CFMutableSetRef
NSMutableSet
Mac OS X v10.0
CFMutableStringRef
NSMutableString
Mac OS X v10.0
CFNumberRef
NSNumber
Mac OS X v10.0
CFReadStreamRef
NSInputStream
Mac OS X v10.0
CFRunLoopTimerRef
NSTimer
Mac OS X v10.0
CFSetRef
NSSet
Mac OS X v10.0
CFStringRef
NSString
Mac OS X v10.0
CFTimeZoneRef
NSTimeZone
Mac OS X v10.0
CFURLRef
NSURL
Mac OS X v10.0
CFWriteStreamRef
NSOutputStream
Mac OS X v10.0
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.