petitviolet blog

    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