bekkou68 の日記

Gogengo! や IT 技術など。

グローバル変数を定義して参照する【Objective-C】【宣言】

おことわり (2014年09月23日 追加)

現在、筆者は以下の記事にあるようなグローバル変数 (グローバルな連想配列) は影響範囲が広すぎるので使っていません。

モデルは property で定義してクラス間で渡したり、global singleton にする等しています。定数やショートカットは AppDelegate に定義して使うことがあります。

はじめに

自分用メモです。

前提

プロジェクト名は myproject とします。

ゴール

models という名前でグローバル変数をつくります。

やり方(2013年5月26日更新)

次のような感じで各ファイルを編集します。

myproject.pch(共通ヘッダー)

// Prefix header for all source files of the 'myproject' target in the 'myproject' project

// ヘッダーにはセミコロンが要らないので注意!
#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #import "AppDelegate.h" // 追加
#endif

// 追加
#define app (AppDelegate *)[[UIApplication sharedApplication] delegate]

// 他にもプロジェクト全体でつかいたい定数・変数があればここで定義

AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate>
    @property (strong, nonatomic) NSMutableDictionary *models; // 追加
@end

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 追加
    // グローバル変数の初期化
    _models = [[NSMutableDictionary alloc] init];
    [_models setObject:[NSMutableArray arrayWithArray:@[@"hoge", @"fuga"] forKey:@"items"]];
}

各ViewController.m

// こんな感じで呼べるようになる!
str = [[app models] objectForKey:@"items"];