我的阅读

CoreFoundation框架详细解析(十) —— 检查对象

2018-02-01  本文已影响53人  刀客传奇

版本记录

版本号 时间
V1.0 2018.02.01

前言

与Foundation框架不同的是,Core Foundation框架 (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能。接下来几篇我们一起重新审视和详细的看一下这个框架。感兴趣的可以看上面写的几篇。
1. CoreFoundation框架详细解析(一) —— 基本概览
2. CoreFoundation框架详细解析(二) —— 简介
3. CoreFoundation框架详细解析(三) —— 不透明类型
4. CoreFoundation框架详细解析(四) —— 对象引用
5. CoreFoundation框架详细解析(五) —— 多态函数
6. CoreFoundation框架详细解析(六) —— 对象的种类
7. CoreFoundation框架详细解析(七) —— 命名约定
8. CoreFoundation框架详细解析(八) —— 其他类型
9. CoreFoundation框架详细解析(九) —— 对象比较

Inspecting Objects - 检查对象

Core Foundation对象的主要特点是它们基于不透明(或私有)类型;因此难以直接检查对象的内部数据。 但是,基本服务提供了两种可以检查Core Foundation对象的函数。 这些函数返回对象和对象类型的描述。

要找出Core Foundation对象的内容,请调用该对象上的CFCopyDescription函数,然后在引用的字符串对象中输出“contained”字符序列:

// 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);
}

这个例子只显示了一种打印描述的方法。 您可以使用CFStringGetBytes以外的CFString函数来获取实际的字符串。

要确定“未知”对象的类型,请使用CFGetTypeID函数获取其类型ID,并将该值与已知的类型ID进行比较,直到找到匹配项。 您使用CFGetTypeID函数获取对象的类型ID。 每个不透明类型还定义CFTypeGetTypeID形式的函数(例如CFArrayGetTypeID); 这个函数返回该类型的类型ID。 因此,您可以测试CFType对象是否是特定不透明类型的成员,如下所示:

CFTypeID type = CFGetTypeID(anObject);
if (CFArrayGetTypeID() == type)
    printf(“anObject is an array.”);
else
    printf(“anObject is NOT an array.”);

要在调试器中显示有关Core Foundation对象类型的信息,请使用CFGetTypeID函数获取其类型ID,然后将该值传递给CFCopyTypeIDDescription函数:

/* aCFObject is any Core Foundation object */
CFStringRef descrip = CFCopyTypeIDDescription(CFGetTypeID(aCFObject));

Note: String Services include two functions, both declared in CFString.h, that you can call in supported debuggers to print descriptions of Core Foundation objects: CFShow and CFShowStr. 注意:String Services包括两个函数,都在CFString.h中声明,您可以在受支持的调试器中调用以打印Core Foundation对象的描述:CFShowCFShowStr

Important: The CFCopyDescription and the CFCopyTypeIDDescription functions are for debugging only. Because the information in the descriptions and their format are subject to change, do not create dependencies on them in your code. 重要说明:CFCopyDescriptionCFCopyTypeIDDescription函数仅用于调试。 由于说明中的信息及其格式可能会发生变化,因此请不要在代码中创建依赖关系。

后记

本篇已结束,后面更精彩~~~

上一篇下一篇

猜你喜欢

热点阅读