1

In my first ViewController ViewControllerTest1 I've got a global variable called counter. counter is supposed to be increased every now and then in my app. Everything works fine:

@implementation ViewControllerTest1{
int counter = 0;

-(void)viewDidLoad
{...}

-(void)method {...}
}

Now if I declare another global variable called counter in my second ViewController ViewControllerTest2 XCode gives me an error.

I know I can just give it a different name, but why does that happen? Can I make sure only the globals of the certain ViewController that is active are in my memory?

Or am I doing something like a no go right now with globals like counter? Is there something better?

4

2 に答える 2

3

シンボルをファイルに固有にする場合はstatic、宣言するときにキーワードを使用します。

あなたの宣言は次のようになります

static int counter = 0;

リンク時(すべてのファイルがコンパイルされた後)、グローバルシンボルは同じファイルに混在しているため、2つが同じ名前を共有している場合、リンカーによってエラーが発生します。

于 2013-03-08T17:31:34.480 に答える
0

ファイル スコープ (クラス定義内ではあるが、ivar 領域またはメソッド本体の外側の場所を含む) で変数を定義すると、externデフォルトでリンクが設定されます。これには、一意のシンボル名が必要です。

静的シンボル名は、宣言されているファイル内で一意である必要があるだけなので、static変数 ( ) にすると問題は解決します。static int ...

このファイルの外で意図的にこの変数にアクセスしていてextern、リンケージを維持する必要がある場合は、2 つを区別するために他の変数に別の名前を付ける必要があります。

于 2013-03-08T17:32:25.577 に答える