9

Xcode をバージョン 5.1 に更新した後、使用していない定数を定義したという警告が表示されました。その定義は次のようになります。

static NSInteger const ABCMyInteger = 3;

マークが付けられたことを嬉しく思いました。これは、コンパイラがローカル変数に加えて未使用の定数をチェックできるようになったことを意味すると考えたからです。

さらにリファクタリングを行い、3 つのNSString定数を廃止しました。3 つすべてがNSInteger、上記と非常によく似て定義されています。

static NSString *const ABCMyString = @"ABCMyString";

しかし、驚いたことに、これらは「未使用」としてマークされませんが、もう使用されていないことは確かです。

NSIntegerがコンパイラによって未使用として通知される理由を誰かが説明できますが、そうでNSStringはありませんか?

4

2 に答える 2

2

プリミティブ変数は、静的メモリ部分に割り当てられ、コンパイラによって初期化される単なるメモリ ブロックです。ただし、文字列オブジェクトは実行時 (おそらく起動時) に初期化される変数であるため、コンパイラはコンストラクターに暗黙的な呼び出しを追加し、その変数をその呼び出しのパラメーターとして使用します。したがって、変数が使用されています。

構造体の_unusedアイテムは私見であり、ディレクティブではなく単なるメンバー変数です。おそらく、配置を改善するために追加されます(オブジェクトサイズをラウンドサイズに塗りつぶします)。

于 2014-03-26T06:42:48.457 に答える