iPhoneアプリ内でアプリケーションスコープのデータを保持する方法②(ApplicationDelegateに保持する)
How to remain a variable in application scope? No2
前回の記事では、保持する値を、ファイルに書き込んでいました。通常のファイルと異なり、UserDefaultsを利用すれば、値のStore/Getはシンプルな記述で実現できます。
さて、次の方法として、その名の通り、アプリケーションで一つのインスタンスを持つ、ApplicationDelegateクラスを利用する方法について見てみましょう。
②ApplicationDelegateに保持する
<MyApp>AppDelegateクラスは、アプリケーションの状態管理やアプリ全体の挙動を担うクラスです。そのため、<MyApp>AppDelegateクラスを各画面やクラスから取得できれば、アプリ共通の値を取得することができることになります。
まず、各画面やクラスからどのようにApplicationDelegateのインスタンスを取得すればよいでしょうか。
それには、以下のコードを利用します。
AppDelegate *myApp = (AppDelegate *)[UIApplication sharedApplication].delegate;
これをとれば、後は、myAppを利用することができます。
この方法の利点は、<MyApp>AppDelegateに定義した変数への値のStore/Getだけでなく、定義した関数も利用できることです。
つまり、各クラスから呼ぶ可能性のある、汎用的なメソッドは、このクラスに定義していても利用することができます。
特に、アプリ内で共通で保持しておくべき変数を使用したメソッドなどは、このクラスに定義しておくとよいのではないかと思います。
<MyApp>AppDelegateへの変数の定義
@interface AppDelegate : NSObject { UIWindow RootViewController *viewController; NSString *userName; } @property(nonatomic, retain)NSString *userName; @end @implementation BirthdayQuizAppDelegate @synthesize userName; @end
<MyApp>AppDelegateへのメソッドの定義
- (void)tweetSend: (NSString *)sendText { NSLog(@"tweetSend"); }
上記定義を利用する場合
myApp.userName;[myApp tweetSend:@"Tweet内容"];
タグ:iphone