constなNSStringでdiscards qualifiers警告が出る
2015-09-08
QiitaObjective-CiOS元の解説はこちら
起こったこと
以下のように 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 *
なら一見良さそうに見えるが、だめだった。
from: https://qiita.com/petitviolet/items/a65d4f55a8927d5aba1b