命名規則
Core Foundation の主なプログラミングインターフェイスの規則では、シンボルに最も密接に関連する不透明型の名前をシンボルの接頭辞として使用します。関数の場合、この接頭辞は、関数が "属している" 型だけでなく、通常、関数の動作の対象となるオブジェクトの型をも識別します。(この規約の例外は定数であり、型接頭辞の前に "k" を付けます)。ヘッダファイルのいくつかの例を以下に示します:
/* from CFDictionary.h */ CF_EXPORT CFIndex CFDictionaryGetCountOfKey(CFDictionaryRef dict, const void *key); /* from CFString.h */ typedef UInt32 CFStringEncoding; /* from CFCharacterSet.h */ typedef enum { kCFCharacterSetControl = 1, kCFCharacterSetWhitespace, kCFCharacterSetWhitespaceAndNewline, kCFCharacterSetDecimalDigit, kCFCharacterSetLetter, kCFCharacterSetLowercaseLetter, kCFCharacterSetUppercaseLetter, kCFCharacterSetNonBase, kCFCharacterSetDecomposable, kCFCharacterSetAlphaNumeric, kCFCharacterSetPunctuation, kCFCharacterSetIllegal } CFCharacterSetPredefinedSet;
Core Foundation には、不透明型やメモリ管理に関連するプログラミングインタフェース規則に加え、いくつかのプログラミングインタフェース規則があります。
- 値を返す関数の名前には、Get と Copy と Create の間に重要な違いがあります。Get 関数を使用すると、返されたオブジェクトの寿命を確認することはできません。このようなオブジェクトの永続性を保証するには、CFRetain 関数を使用してオブジェクトを保持するか、場合によってはコピーできます。Copy または Create 関数を使用する場合は、(CFRelease 関数を使用して) オブジェクトを解放する責任があなたにはあります。詳細については、Core Foundation のためのメモリ管理プログラミングガイド を参照してください。
- いくつかの Core Foundation オブジェクトの中には、一般的な操作の間に一貫性を持たせるための独自の命名規則があります。たとえば、コレクションには、コレクションの要素に対する特定の操作を意味する関数名に以下の動詞が埋め込まれています。
- "Add" は、"存在しない場合は追加し、存在する場合は何もしない"(一意のコレクションの場合) を意味します。
- "Replace" は "存在する場合は置き換え、存在しない場合は何もしない" を意味します。
- "Set" は "存在しない場合には追加し、存在する場合に置き換える" を意味します。
- "削除" は "存在する場合は削除し、存在しない場合は何もしない" を意味します。
- CFIndex 型は、index、count、length、および size パラメータと戻り値に使用されます。この型が表す整数値(現在は 32 ビット) は、プロセッサのアドレスサイズが大きくなるにつれてますます大きくなる可能性があります。ポインタのサイズが異なる、例えば 64 ビットのアーキテクチャでは、CFIndex は int のサイズに関係なく 64 ビットと宣言されるかもしれません。同じ型の Core Foundation 引数と相互作用する変数に CFIndex を使用することで、コードのソース互換性が向上します。
- 一部の Core Foundation ヘッダーファイルは不透明型を定義するように見えるかもしれませんが、実際には特定の型に関連付けられていないコンビニエンス関数を含んでいます。ポイントとなるケースは CFPropertyList.h です。 CFPropertyList は、プロパティリスト型のいずれか(CFString、CFData、CFBoolean、CFNumber、CFDate、CFArray、および CFDictionary) のプレースホルダ型です。
- 特に指定しないかぎり、値を返すことを意図したすべての参照パラメータは NULL を受け入れることができます。これは、呼び出し元がその戻り値に関心がないことを示します。