2012-01-19 11 views
1

わかりますように、私はObjective-Cを初めて使っています。私は現在、シングルトンを使用していますが、私は同じ.mファイル内のいくつかのメソッドで使用しようとしています。.mファイル全体で変数をアクセス可能にする適切な方法は?

は今、私は宣言/メソッド内でシングルトンをインスタンス化するためにこれを使用します。

GlobalData *globDat=[GlobalData getInstance]; 

私は、各メソッドの中でそれを宣言する必要がありますか、またはの上部にこれを行う方法があります。 m(または.h?)ファイルに格納されているので、他の方法でアクセスできますか?

おかげで...

(ところで、私は私の「@implementation」行の下に上記のコードの行を配置しようとしましたが、私はエラーを取得:「初期化子要素が定数コンパイル時ではありません」これは私が今ラインがメソッド内ではないので、知っている)

答えて

1

あなたはクラス拡張を追加し、このようなIVARのグローバルデータを格納することができます。

@interface MyClass() { 
    GlobalData *globDat; 
} 
@end 

@implementation MyClass 

-(id) init { 
    self = [super init]; 
    if (self) { 
     globDat=[GlobalData getInstance]; 
    } 
    return self; 
} 

@end 

これからglobDatを非表示になりますインタフェースを使用して、それをメサを通して利用可能にする実行ブロックMyClass内に実装するods。

+1

部分的に.hと.mファイルに部分的に入るコードを投稿しましたか? @interface ... @ end in .h、残りは.m? – wayneh

+0

また、単に.hファイルに宣言して非公開にすることもできます。 – aqs

+0

@waynehいいえ、絶対にそうではありません。クラス拡張で、.mファイルに入ります。だからこそ名前は単にMyClassではなく、MyClass()と一対のかっこで囲まれています。これは、 "" Global.h "を" MyClass.h "にドラッグする必要なく、クラスにプライベートなivarsを追加する一般的な方法です。 – dasblinkenlight

0

実装データ内のすべてのメソッドにアクセス可能な変数/オブジェクトが必要な場合は、ヘッダファイルで宣言し、実装ファイルで合成する必要があります(GlobalDataヘッダ)ヘッダにおけるよう

(.H):

@class GlobalData; 

@properties (nonatomic, strong) GlobalData *globDat; 

、その後実装ファイルで(.M)

#import "blablabla.h" 
#import "GlobalData.h" 

@implementation blablabla 

@synthesize globDat; 

-(void)viewDidLoad 
{ 
globDat = [GlobalData getInstance]; 
} 

幸運

関連する問題