|
HMDT - Special Issue / CoreFoundation の秘密 / String Services - 構造を見るための前提 |
- String Servcies -
|
|
CoreFoundation/String.subproj/CFBase.h
|
typedef const struct __CFString * CFStringRef; typedef struct __CFString * CFMutableStringRef; |
CFStringRef は固定長文字列、CFMutableStringRef は可変長文字列。どちらも同じ __CFString* のことだけど、もちろん内部では異なっている。CFStringRef の方が効率がいいので、使える場合はできるだけ CFStringRef を使うことをすすめるよ。
![]()
CFString のインスタンスを作る時に、自前のバッファを持つか、外部のバッファを参照するかどうか設定することができる。
自前のバッファを持つときは、必要なサイズのメモリを確保する。初期の文字列が与えられてるときは、それをコピーする。この場合は、このインスタンスを解放した時に、バッファも解放されるよ。
外部のバッファを参照するときは、メモリも確保しないしコピーもしない。効率はいいけど、外部バッファを自分で管理する必要あり。インスタンスを解放しても、外部バッファはそのままだよ。![]()
というのが前提。一言で言うと、「8 bit か 16 bit の配列(混在可)で、固定長か可変長で、長さ情報が埋め込まれているかもしれなくて、内部か外部にバッファがある」ってことだ。なんでもありだな、おい。これを 1 つの構造体で実現しようとするから、けっこう無茶がある。次の節で詳しく見るぜ。
(Nov. 11, 2002)
|
Home | Link | Download | Back Number | Speciall Issue
|