元の解説はこちら
起こったこと
以下のようにconstantな文字列を定義したとき、discards qulifiersという警告が出た
const NSString * CONSTANT_STRING = @"";
結論
constantな文字列を定義するときは以下のように書きましょう
NSString * const CONSTANT_STRING = @"";
この書き方で初めて、CONSTANT_STRING
が別のNSStringオブジェクトへのポインターへ再割当てされるのを防ぐことになる。
つまり、constantなポインタがNSStringオブジェクトを指している状態となっている。
だめな書き方
以下のいずれかの書き方だと上の警告が出る
const NSString * CONSTANT_STRING = @"";
NSString const * CONSTANT_STRING = @"";
これらはconstantなNSStringオブジェクトに対するポインタを指すことになってしまっている。
もともとimmutableなNSStringをさらにconstantにしたオブジェクトを指しているので、NSString *
と全く同じこととなる。
NSString const *
なら一見良さそうに見えるが、だめだった。