CFData and its derived mutable type, CFMutableData, provide support for data objects, object-oriented wrappers for byte buffers. Data objects let simple allocated buffers (that is, data with no embedded pointers) take on the behavior of Core Foundation objects. CFData creates static data objects, and CFMutableData creates dynamic data objects. Data objects are typically used for raw data storage.
You use the
CFDataCreateCopy(_:_:) functions to create static data objects. These functions make a new copy of the supplied data. To create a data object that uses the supplied buffer instead of making a separate copy, use the
CFDataCreateWithBytesNoCopy(_:_:_:_:) function. You use the
CFDataGetBytes(_:_:_:) function to retrieve the bytes and the
CFDataGetLength(_:) function to get the length of the bytes.
CFData is “toll-free bridged” with its Cocoa Foundation counterpart,
NSData. What this means is that the Core Foundation type is interchangeable in function or method calls with the bridged Foundation object. In other words, in a method where you see an
NSData * parameter, you can pass in a
CFDataRef, and in a function where you see a
CFDataRef parameter, you can pass in an
NSData instance. This also applies to concrete subclasses of
NSData. See Toll-Free Bridged Types for more information on toll-free bridging.