NSStringを定数に変換するとき、私は通常使用します
[@"..." UTF8String];
アドレス帳のプログラミングに関するアップルのドキュメントを調べていたところ、マクロを使用していることがわかりました
CFSTR("...");
好奇心から、私は2つの間に何か違いがあるのだろうかと思っています。
NSStringを定数に変換するとき、私は通常使用します
[@"..." UTF8String];
アドレス帳のプログラミングに関するアップルのドキュメントを調べていたところ、マクロを使用していることがわかりました
CFSTR("...");
好奇心から、私は2つの間に何か違いがあるのだろうかと思っています。
CFSTR("...")
は、基本的に に相当する Core Foundation です@"..."
。実際には、次のことができます。
const char *utf8dots = [(NSString *)CFSTR("...") UTF8String];
そして、コードの最初の行と同じ結果が得られます。
理論上、CFSTR()
は定数を作成しますが、 は定数CFString
を@""
作成しますNSString
。実際には、2 つのタイプは交換可能です。
それは役に立ちますか?
それらはまったく異なる種類のものを作成します。オブジェクトであるCFStringRefを取得します(CFTypeですが、オブジェクトと互換性があります)。もう 1 つは char* を取得します。これは単なる char の配列であり、オブジェクトではありません。たとえば、次のようにします。
[(NSString *)CFSTR("foo") UTF8String];
それは完全に有効です。
前者は実際には何も作成せず、単にconst char
NSString (ランタイム関数) の内部ポインターを返します。後者は、コンパイル時の定CFStringRef
数値を作成します。これらの変数はコンパイル時に使用できないため、変数と一緒に使用することはできません。
編集最後の文が少し曖昧であることを認識しています。の結果を変数として使用できますCFSTR
が、変数を引数として渡すことはできません。