「'const NSString *' を 'NSString *' 型のパラメータに送信すると、修飾子が破棄されます」という警告 質問する

「'const NSString *' を 'NSString *' 型のパラメータに送信すると、修飾子が破棄されます」という警告 質問する

次のように呼び出したい定数 NSString があります。

[newString isEqualToString:CONSTANT_STRING];

ここに間違ったコードはありますか?

次のような警告が表示されました:

'const NSString *' を 'NSString *' 型のパラメータに送信すると、修飾子が破棄されます。

これらはどのように宣言すればよいでしょうか?

ベストアンサー1

定数文字列は次のように宣言する必要があります。

NSString * const kSomeConstantString = @""; // constant pointer

の代わりに:

const NSString * kSomeConstantString = @""; // pointer to constant
// equivalent to
NSString const * kSomeConstantString = @"";

前者はNSStringオブジェクトへの定数ポインターであり、後者は定数NSStringオブジェクトへのポインターです。

を使用すると、NSString * constkSomeConstantString を別のオブジェクトを指すように再割り当てできなくなりますNSString

メソッドはisEqualToString:型の引数を必要としますNSString *。定数文字列 ( ) へのポインターを渡すとconst NSString *、期待するものとは異なるものが渡されます。

さらに、NSStringオブジェクトはすでに不変なので、オブジェクトを作成してもconst NSString意味がありません。

おすすめ記事