Help us understand the problem. What is going on with this article?

constなNSStringでdiscards qualifiers警告が出る

More than 3 years have passed since last update.

元の解説はこちら

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 *なら一見良さそうに見えるが、だめだった。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした