てぃーだブログ › やまの生態@東京ー>広島 › 電算術 › 【iOS SDK】グローバル変数の罠

2011年07月01日

【iOS SDK】グローバル変数の罠

うちで起こった現象です。
まったくもって、xcodeなりの仕様は調べてないので、うち特有の現象だか何だかは分かりませんので。あしからず。

iOS SDKのクラスで、グローバルな変数を使いたい(別のクラスからも利用したい)場合、
ヘッダーファイルに、@publicを付けるとできる。
例えば、int型のaという変数を別のクラスから利用する場合は、

ヘッダーファイル(.h)の@interfaceの中に、

@public int a;

と書く。
別のクラスから、このインスタンスobjのaを、bに代入するには、

int b = obj->a;

と書く。
書き込みもできます。
しかし、この変数は、cの関数からはアクセスできなかった。
例えば、上記aを、メインファイル(.m)内に定義した関数fから、

void f() {
int b = a;
}

とすると、エラーになる。
で、同じメインファイル(.m)内に、変数を宣言すると、cの関数からグローバルに使えるのだが。
先の@publicで宣言した変数とは別物になるっぽい。

int a;
void f1() {
a = 1;
}
-(void)f2 {
a = 2;
f1();
NSLog(@"%d", a);
}

このメソッドを呼び出すと、

[obj f2];

ログには、2が出力される。


同じカテゴリー(電算術)の記事
Try WiMAX
Try WiMAX(2013-03-15 20:00)


Posted by やま104 at 14:12│Comments(0)電算術
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。