グローバル定数の定義方法
先日、グローバル定数の定義方法について調べたので、そのことを書きました。
どこからでも参照できるグローバル定数はとても便利ですね。
でも…
グローバール定数は便利ですが、非常に危なっかしい仕組みでもあります。
名前ひとつで呼び出せる反面、同じ名前の変数をローカルに作っちゃったりすると大変なことになる場合があります。
AppDelegate にReadonlyプロパティを作っちゃえば良いんでね?
そこで、AppDelegate にReadonly プロパティを作って、グローバル定数の代わりをさせることにしました。
使うときにいちいちAppDelegate を呼び出すのが面倒ですが、その辺もマクロで随分と省力化が可能です。
ちなみに、AppDelegate の呼び出しマクロについては、こちらで。
こんな感じ
そんなわけでコードに書くとこんな感じになります。
AppDelegate.h
#import <UIKit/UIKit.h> @interface MyAppDelegate : UIResponder <UIApplicationDelegate> @property (readonly, strong, nonatomic) NSString* hoge;
AppDelegate.m
#import "MyAppDelegate.h" @implementation MyAppDelegate NSString* const hoge = @"ほげ"; - (NSString*)hoge { return hoge; }
MyViewController.m
// 使うとき(※AppDelegate の呼び出しはマクロを使って単純化 NSLog("%@", [APP hoge]);
プロパティの値は式の中で書いても良いのでしょうが、もともと頻繁に使う前提なのでconst で予め定義しています。
グローバル定数との違いは、いちおうAppDelegate 下に置かれているので、名前空間の衝突を心配しなくて済むことでしょうか。
まあ、これも例によって良い方法なのかどうかわかりません。
ツッコミ、ご指導大歓迎です。