次のコード セグメント:
@implementation Foo
NSString* bar = @"Some text.";
...
@end
静的変数ですかbar
、それともある種のクラスまたはインスタンス変数ですか? 具体的には、次のこととどのように違いますか。
static NSString* bar = @"Some text.";
@implementation Foo
...
@end
次のコード セグメント:
@implementation Foo
NSString* bar = @"Some text.";
...
@end
静的変数ですかbar
、それともある種のクラスまたはインスタンス変数ですか? 具体的には、次のこととどのように違いますか。
static NSString* bar = @"Some text.";
@implementation Foo
...
@end
最初の例でbar
は、グローバル変数であり、外部の世界に対するグローバル リンカーの可視性があります。
2 番目の例でbar
は、 は静的変数であり、ローカル ファイルのみが表示されます (つまり、シンボルは現在のコンパイル単位の外では表示されません)。
どちらの例でも、Objective-C キーワードに対する相対的な位置付け@implementation
は関係ありません。@implementation
それらは、Objective-C クラスとはまったく関係がなく、スコープの内外を問わず同じように動作します。
私が理解しているように、メソッドの外部で定義されたすべての変数は、定義上グローバルです。これらは、ほとんどすべての言語のグローバル変数と同じです。それらは暗黙的に静的(AFAIK)ではありませんが、明示的に静的にすることができます。2つの例に違いはないと思いますが、間違っている可能性があります。2番目の例を明示的に静的にしたことに気づきませんでした。上の方はグローバルで、下の方はグローバルで静的です(ファイル全体のスコープ)。