オブジェクト変数を として宣言しますがNSString
、XCode を使用してオブジェクトを調べると、2 つのタイプの String があることがわかりました。システムが自動的に別のタイプに転送されるようです。
それらの違いは何ですか?それらは、あるものと他のものと交換可能ですか。また、2つが別のものに変わる条件は何ですか?
ありがとう。
オブジェクト変数を として宣言しますがNSString
、XCode を使用してオブジェクトを調べると、2 つのタイプの String があることがわかりました。システムが自動的に別のタイプに転送されるようです。
それらの違いは何ですか?それらは、あるものと他のものと交換可能ですか。また、2つが別のものに変わる条件は何ですか?
ありがとう。
どちらも の具体的なサブクラスですNSString
。__NSCFString
Foundation または Core Foundation を介して実行時に作成されるものであり、コンパイル時に作成される定数または定数の__NSCFConstantString
いずれかです。CFSTR("...")
@"..."
それらのインターフェースはプライベートです。それらを両方とも扱いNSString
、問題はないはずです。
私の知る限り、文字列データをコードメモリに保持NSCFConstantString
する実装です。定数NSString
を使用すると、コンパイラはそのインスタンスを作成します。サブクラス/スーパークラスの関係により、どこでも@"string"
使用できますが、明らかにその逆ではありません。NSCFConstantString
NSString
コンパイラによる最適化のようです。に変換される文字列はNSCFConstantString
、パフォーマンス上の理由からキャッシュされている定数の 1 つと等しいと思います。YourNSCFString
は、NSString
またはCFString
. 詳細については、この記事を参照してください。