版本記錄
| 版本號(hào) | 時(shí)間 |
|---|---|
| V1.0 | 2018.02.01 |
前言
與Foundation框架不同的是,
Core Foundation框架(CoreFoundation.framework)是一組C語(yǔ)言接口,它們?yōu)閕OS應(yīng)用程序提供基本數(shù)據(jù)管理和服務(wù)功能。接下來(lái)幾篇我們一起重新審視和詳細(xì)的看一下這個(gè)框架。感興趣的可以看上面寫(xiě)的幾篇。
1. CoreFoundation框架詳細(xì)解析(一) —— 基本概覽
2. CoreFoundation框架詳細(xì)解析(二) —— 簡(jiǎn)介
3. CoreFoundation框架詳細(xì)解析(三) —— 不透明類(lèi)型
4. CoreFoundation框架詳細(xì)解析(四) —— 對(duì)象引用
5. CoreFoundation框架詳細(xì)解析(五) —— 多態(tài)函數(shù)
6. CoreFoundation框架詳細(xì)解析(六) —— 對(duì)象的種類(lèi)
7. CoreFoundation框架詳細(xì)解析(七) —— 命名約定
8. CoreFoundation框架詳細(xì)解析(八) —— 其他類(lèi)型
9. CoreFoundation框架詳細(xì)解析(九) —— 對(duì)象比較
Inspecting Objects - 檢查對(duì)象
Core Foundation對(duì)象的主要特點(diǎn)是它們基于不透明(或私有)類(lèi)型;因此難以直接檢查對(duì)象的內(nèi)部數(shù)據(jù)。 但是,基本服務(wù)提供了兩種可以檢查Core Foundation對(duì)象的函數(shù)。 這些函數(shù)返回對(duì)象和對(duì)象類(lèi)型的描述。
要找出Core Foundation對(duì)象的內(nèi)容,請(qǐng)調(diào)用該對(duì)象上的CFCopyDescription函數(shù),然后在引用的字符串對(duì)象中輸出“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);
}
這個(gè)例子只顯示了一種打印描述的方法。 您可以使用CFStringGetBytes以外的CFString函數(shù)來(lái)獲取實(shí)際的字符串。
要確定“未知”對(duì)象的類(lèi)型,請(qǐng)使用CFGetTypeID函數(shù)獲取其類(lèi)型ID,并將該值與已知的類(lèi)型ID進(jìn)行比較,直到找到匹配項(xiàng)。 您使用CFGetTypeID函數(shù)獲取對(duì)象的類(lèi)型ID。 每個(gè)不透明類(lèi)型還定義CFTypeGetTypeID形式的函數(shù)(例如CFArrayGetTypeID); 這個(gè)函數(shù)返回該類(lèi)型的類(lèi)型ID。 因此,您可以測(cè)試CFType對(duì)象是否是特定不透明類(lèi)型的成員,如下所示:
CFTypeID type = CFGetTypeID(anObject);
if (CFArrayGetTypeID() == type)
printf(“anObject is an array.”);
else
printf(“anObject is NOT an array.”);
要在調(diào)試器中顯示有關(guān)Core Foundation對(duì)象類(lèi)型的信息,請(qǐng)使用CFGetTypeID函數(shù)獲取其類(lèi)型ID,然后將該值傳遞給CFCopyTypeIDDescription函數(shù):
/* 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包括兩個(gè)函數(shù),都在CFString.h中聲明,您可以在受支持的調(diào)試器中調(diào)用以打印Core Foundation對(duì)象的描述:CFShow和CFShowStr。
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. 重要說(shuō)明:
CFCopyDescription和CFCopyTypeIDDescription函數(shù)僅用于調(diào)試。 由于說(shuō)明中的信息及其格式可能會(huì)發(fā)生變化,因此請(qǐng)不要在代碼中創(chuàng)建依賴(lài)關(guān)系。
后記
本篇已結(jié)束,后面更精彩~~~
