[Objective-C] グローバル定数を使うよりAppDelegate にReadonly なプロパティを置く方がよいかも

投稿者: | 2013/12/19

グローバル定数の定義方法

先日、グローバル定数の定義方法について調べたので、そのことを書きました。


どこからでも参照できるグローバル定数はとても便利ですね。

 

でも…

グローバール定数は便利ですが、非常に危なっかしい仕組みでもあります。

名前ひとつで呼び出せる反面、同じ名前の変数をローカルに作っちゃったりすると大変なことになる場合があります。

 

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 下に置かれているので、名前空間の衝突を心配しなくて済むことでしょうか。

まあ、これも例によって良い方法なのかどうかわかりません。

ツッコミ、ご指導大歓迎です。

 



 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータがどう処理されているか知りたい方はこちらをお読みください