2009-06-09 9 views
3

私は書かなかったいくつかのObjective-Cコードを通して自分のやり方を研究しています。私がよく知らない変数宣言スタイルを見つけました。誰かが下のクラス実装で変数 'myVar'のスコープを教えてくれますか?これは '.m'ファイルにあり、インタフェース宣言ではないことに注意してください。これはObjective-C変数のどのクラスですか?

@implementation MyClass 
@synthesize ivar1, ivar2; 

NSString* myVar; // <- What is the intent? 

- (id)init { 

... 

@end 

私にとって、意図はメンバ変数と同じように見えます。 @interface宣言でivarを使用する代わりに、このように変数を宣言することの利点は何ですか?

答えて

9

これは単なる古いグローバル変数です。インスタンスは1つしかなく、同じファイル内の任意のコードでアクセスできます翻訳単位(プリプロセッサを実行した後に得られる最終ファイル)。他の翻訳単位(つまり、他の.mファイル)も、グローバル変数というアクセスできますが、そうするためには、彼らがexternステートメントを使用する必要があります。

extern

extern NSString *myVar; 
が、これはグローバルの名前である」と言います変数ですが、別の翻訳単位で定義されています」。リンカーは、リンク時にすべての extern宣言を解決します。

2

悪いという名前のグローバル変数...

+0

元のプログラマーには公平でありがとうございます。私はこのポストの目的のために変数を一般的なものに改名しました。 – teabot

+0

公平はクールです。 (ここではS.O.で過小評価されている) – kent

1

私にObjCであまり経験がないが、私はそれがグローバルであると思います。

関連する問題