13

オブジェクト変数を として宣言しますがNSString 、XCode を使用してオブジェクトを調べると、2 つのタイプの String があることがわかりました。システムが自動的に別のタイプに転送されるようです。

ここに画像の説明を入力

それらの違いは何ですか?それらは、あるものと他のものと交換可能ですか。また、2つが別のものに変わる条件は何ですか?

ありがとう。

4

4 に答える 4

18

どちらも の具体的なサブクラスですNSString__NSCFStringFoundation または Core Foundation を介して実行時に作成されるものであり、コンパイル時に作成される定数または定数の__NSCFConstantStringいずれかです。CFSTR("...")@"..."

それらのインターフェースはプライベートです。それらを両方とも扱いNSString、問題はないはずです。

于 2012-04-19T02:24:19.487 に答える
3

私の知る限り、文字列データをコードメモリに保持NSCFConstantStringする実装です。定数NSStringを使用すると、コンパイラはそのインスタンスを作成します。サブクラス/スーパークラスの関係により、どこでも@"string"使用できますが、明らかにその逆ではありません。NSCFConstantStringNSString

于 2012-04-19T02:17:39.320 に答える
3

コンパイラによる最適化のようです。に変換される文字列はNSCFConstantString、パフォーマンス上の理由からキャッシュされている定数の 1 つと等しいと思います。YourNSCFStringは、NSStringまたはCFString. 詳細については、この記事を参照してください。

于 2012-04-19T02:17:47.713 に答える