2010年06月04日

Objective-Cでのグローバル変数 @ iPod touch

Twitterのiphone_dev_jpで、AppDelegateクラスを使ってグローバル変数を使う方法を質問している人が居て、その回答があり、こんな方法もあるのかと思い試してみました。

取り敢えず、GlobalVarTestと言う名前でプロジェクトを作った前提で書きます。

まずは、GlobalVarTestAppDelegate.hに変数fooを追加。

@interface GlobalVarTestAppDelegate : NSObject <UIApplicationDelegate> {

UIWindow *window;
UINavigationController *navigationController;

NSString *foo;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;

@property (nonatomic, retain) NSString *foo;
@end

次にGlobalVarTestAppDelegate.mに

@synthesize foo;

を追加します。

次は、その変数を使ってみます。適当なクラスに下記の記述をします。

GlobalVarTestAppDelegate *appDelegate = (GlobalVarTestAppDelegate *)[[UIApplication sharedApplication] delegate];

appDelegate.foo = @"テストです。";


更に別なクラスでは、こんな感じで呼び出して使います。

GlobalVarTestAppDelegate *appDelegate = (GlobalVarTestAppDelegate *)[[UIApplication sharedApplication] delegate];
self.myLabel.text = appDelegate.foo;

myLabelは

@property (retain,nonatomic) IBOutlet UILabel *myLabel;

として、Interface BuilderでViewにUILabelを置いて、アウトレットとしてバインドしてます。

使い方としてはこんな感じです。余計なクラスを新たに作らなくて良いのでこれは良いかも。沢山グローバル変数を使いたい場合は、AppDelegateファイルに記述が増えて、他の方法がよい気もしますが、取り敢えずって場合には良いと思います。

自分の場合は、シングルトン(インスタンスが一つしか持てないクラス)を使っているのですが、これもちょっと回りくどいですからね。グローバル変数って言うよりも、グローバルな形で一塊のデータを扱いたい場合には、シングルトンなんでしょうけど。

今回のネタ元は下記のつぶやきでした。

Twitter / iphone_dev_jp: @uenno AppDelegate.hをインポート ...
>>関連リンク

閲覧数: 13570 / はてなブックマークusers

blog comments powered by Disqus

関連日記

アマゾン広告

この日記ページは閲覧数などの条件に応じて、閲覧制限を行っています。他からリンクしていただいても、そのリンクから辿った閲覧者が当ページの内容をご覧頂けない場合があります。ご了承下さい。

▼日記検索

Mac

Shade

3D

Flash

ゲーム

ウェブ

音楽

映画

デジカメ

Windows

Linux

携帯電話

テレビ

広島

電子工作

iOS

▼ 最近のトラックバック

▼ランキング

▼関連サイト