オブジェクトの検査


Core Foundation オブジェクトの主な特徴は、それらが不透明(または private) 型に基づいていることです。このためオブジェクトの内部データを直接検査することは困難である。ただし、基本サービスには、Core Foundation オブジェクトを検査できる 2 つの関数があります。これらの関数は、オブジェクトとオブジェクトの型の説明を返します。


Core Foundation オブジェクトの内容を調べるには、そのオブジェクトの CFCopyDescription 関数を呼び出し、参照された文字列オブジェクトに文字列 "contained" を出力します。


リスト 1 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);
}


この例は、説明を印刷するための 1 つのアプローチを示しています。CFStringGetBytes 以外の CFString 関数を使用して、実際の文字列を取得できます。


"不明な" オブジェクトの型を判別するには、その型 ID を CFGetTypeID 関数で取得し、一致するものが見つかるまでその値を既知の型 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));


注意: String Services には 2 つの関数があり、両方とも CFString.h で宣言され、サポートされているデバッガを呼び出して、Core Foundation オブジェクトの説明(CFShowCFShowStr) を出力できます。


重要: CFCopyDescription 関数と CFCopyTypeIDDescription 関数はデバッグ専用です。説明の情報とその形式は変更される可能性があるため、コードにそれらへの依存関係を作成しないでください。


前の章 次の章



目次
Xcode 10 の新機能

  • Core Foundation の設計思想への序文
  • この文書の構成
  • 不透明型
  • 不透明型の有利さ
  • オブジェクト参照
  • 多形関数
  • 様々なオブジェクト
  • 命名規則
  • その他の型
  • オブジェクトの比較
  • オブジェクトの検査
  • 通話無料でブリッジされた型
  • キャストとオブジェクトの寿命の意味
    通話無料でブリッジされた型
  • 文書改訂履歴












  • トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)