2012-03-03 8 views
-2

私はNSString *日付を持っています。私はインターネットからいくつかのデータを取得し、今、私はこの変数に必要な日付を持っています。私はいつでもプログラム内の任意のスコープでそれを返すメソッドを呼び出すことなく、このNSStringを使用できるようにしたい。シングルトンの目的C

インターネットから変数が保持される日付を取得するコードはどこに置くのですか?それはここにあるだろうか?最終的にdate = sharedInstanceを作成しますか?

static SingletonClass *sharedInstance = nil; 

// Get the shared instance and create it if necessary. 
+ (SingletonClass *)sharedInstance 
{ 
    if (sharedInstance == nil) { 
     sharedInstance = [[super allocWithZone:NULL] init]; 
    } 

    //Do I Put Code here????? 

    return sharedInstance; 
} 

ありがとうございます!

+0

あなたはそれを行うためにシングルトンを必要としません。 – Steve

+5

'メソッドを呼び出すことなくいつでもこのNSStringを使用できるようにしたい - ここではシングルトンではなくグローバル変数を記述しています。また、なぜあなたはこれを望んでいるのですか?メソッドを呼び出すことを避ける理由は何ですか?大部分の場合、デザインでグローバル変数やシングルトンを使用すると、デザインを改善できます。 –

+3

[すべてのメソッドで使用されるデータを最終的に保持する変数を作成する](http://stackoverflow.com/questions/9548556/creating-a-variable-that-will-eventually-hold- a-piece-of-all-to-all-by-all) –

答えて

0

あなたが本当にシングルトンパターンを使用したいとGCDでOSをターゲットにすることができた場合は、dispatch_onceはあなたのシングルトンのコードを簡素化することができ、例えば

+ (id)sharedFoo 
{ 
    static dispatch_once_t pred; 
    static Foo *foo = nil; 

    dispatch_once(&pred, ^{ foo = [[self alloc] init]; }); 
    return foo; 
} 

要件に応じて、あなたが必要とする追加のどんな初期提供するinitメソッドをオーバーライドすることができます。

+0

'+(Foo *)sharedFoo'はなぜですか? –

+0

@LarsSchneider、 'id'の代わりに' Foo * 'を使うと、サブクラスのメソッドを再宣言する必要があります。 –

+1

クラスのインスタンスを返すメソッドは、通常、匿名型の「id」のオブジェクトを返します。これにより、初期化メソッドは、メソッドのクラス以外のクラスのインスタンスを返すことができます。 – FluffulousChimp