.hファイルに次の行があります(@interfaceブロックの外):
static NSMutableDictionary *dictLookup;
対応する.mファイルinit
で、クラスのメソッドでその静的を初期化しようとします。
dictLookup = [NSMutableDictionary dictionary];
dictLookup setValue:@"Hello?" forKey:@"Goodbye"];
ただし、ブレークポイントを挿入してチェックを実行すると、dictLookupがnil以外になることはありません。
また、コンパイル時に「未使用の変数dictLookup」という奇妙な警告が表示されます。init
静的宣言を削除すると、メソッドの行で「宣言されていない識別子」コンパイラエラーが発生するため、奇妙です。
それ以来、自分がやりたいことを行うためのより良い方法があることを発見しました。しかし、ここで何が起こっていたのでしょうか?(1)dictLookupを何にも設定できないのはなぜですか?
一部の情報源は、Cでは静的変数はそれが宣言されているファイルでのみ使用できると言っているようです。(2)もしそうなら、なぜコンパイラは.mファイルのエラーで失敗しないのですか?(1)を考えると、それはコンパイラーを設計するための論理的なことのように思われます。
そして(3)説明したような新しい.h / .mファイルの組み合わせを使用して、新しい「テスト」プロジェクトを最初から設計したとき、dictLookupを設定してキーを挿入することができました。なぜこの違いを認めることができるのでしょうか?