blog.petitviolet.net

constなNSStringでdiscards qualifiers警告が出る

2015-09-08

QiitaObjective-CiOS

元の解説はこちら

objective c - “sending ‘const NSString _’ to parameter of type ‘NSString _’ discards qualifiers” warning - Stack Overflow

起こったこと

以下のように 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