7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

constなNSStringでdiscards qualifiers警告が出る

Posted at

元の解説はこちら

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

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?