1. ホーム
  2. オブジェクティブC

[解決済み】Objective-Cのシングルトンはどのように見えるべきですか?[クローズド]

2022-03-25 08:16:19

質問

私のシングルトン・アクセッサ・メソッドは、通常、何らかの変種である。

static MyClass *gInstance = NULL;

+ (MyClass *)instance
{
    @synchronized(self)
    {
        if (gInstance == NULL)
            gInstance = [[self alloc] init];
    }

    return(gInstance);
}

これを改善するには、どうしたらいいでしょうか?

解決方法は?

もう一つの選択肢は +(void)initialize メソッドを使用します。 ドキュメントより。

ランタイムが送信する initialize は、そのクラスやそれを継承したクラスがプログラム内から最初のメッセージを送信される直前に、プログラム内の各クラスにちょうど一度だけ送信されます。(従って、そのクラスが使用されなければ、メソッドは決して起動されないかもしれません。) ランタイムは initialize メッセージをスレッドセーフな方法でクラスへ送ります。スーパークラスは、サブクラスより先にこのメッセージを受け取ります。

ということは、これに近いことができるわけですね。

static MySingleton *sharedSingleton;

+ (void)initialize
{
    static BOOL initialized = NO;
    if(!initialized)
    {
        initialized = YES;
        sharedSingleton = [[MySingleton alloc] init];
    }
}