Inspecting Objects
A primary characteristic of Core Foundation objects is that they’re based on an opaque (or private) type; it is thus difficult to inspect the internal data of an object directly. Base Services, however, provide two functions with which you can inspect Core Foundation objects. These functions return descriptions of an object and of the object’s type.
To find out the contents of a Core Foundation object, call the CFCopyDescription
function on that object and then print the character sequence “contained” in the referred-to string object:
Listing 1 Using CFCopyDescription
void describe255(CFTypeRef tested) { |
char buffer[256]; |
CFIndex got; |
CFStringRef description = CFCopyDescription(tested); |
CFStringGetBytes(description, |
CFRangeMake(0, CFStringGetLength(description)), |
CFStringGetSystemEncoding(), '?', TRUE, buffer, 255, &got); |
buffer[got] = (char)0; |
fprintf(stdout, "%s", buffer); |
CFRelease(description); |
} |
This example shows just one approach for printing a description. You could use CFString functions other than CFStringGetBytes
to get the actual string.
To determine the type of an “unknown” object, obtain its type ID with the CFGetTypeID
function and compare that value with known type IDs until you find a match. You obtain an object’s type ID with the CFGetTypeID
function. Each opaque type also defines a function of the form CF
TypeGetTypeID
(for example, CFArrayGetTypeID
); this function returns the type ID for that type. Therefore, you can test whether a CFType object is a member of a specific opaque type as in:
CFTypeID type = CFGetTypeID(anObject); |
if (CFArrayGetTypeID() == type) |
printf(“anObject is an array.”); |
else |
printf(“anObject is NOT an array.”); |
To display information about the type of a Core Foundation object in the debugger, use the CFGetTypeID
function to get its type ID, then pass that value to the CFCopyTypeIDDescription
function:
/* aCFObject is any Core Foundation object */ |
CFStringRef descrip = CFCopyTypeIDDescription(CFGetTypeID(aCFObject)); |
Copyright © 2003, 2013 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2013-12-16