3

通常、次のレシピでシングルトンを構築していました。

+ (MyClass *)sharedInstance 
{       
    static MyClass *_sharedInstance = nil;
    static dispatch_once_t oncePredicate;

    dispatch_once(&oncePredicate, ^{
        _sharedInstance = [[self alloc] init];
        // Init variables
    });

    return _sharedInstance;
}

次に、次のようにメソッドを呼び出すことができます。

[[MyClass sharedInstance] anyInstanceMethod];

しかし、init 変数がクラス外から構成可能である場合はどうなるでしょうか。私のアプローチは、2 つのクラス メソッドを作成することです。そのうちの 1 つは構成可能な変数を使用します。

+ (MyClass *)sharedInstanceWithVariableOne:(NSString*)aParamOne andVariableTwo:(NSString*)aParamTwo 
{       
    static MyClass *_sharedInstance = nil;
    static dispatch_once_t oncePredicate;

    dispatch_once(&oncePredicate, ^{
        _sharedInstance = [[self alloc] init];

        // Init configurables variables
        _sharedInstance.paramOne = aParamOne;
        _sharedInstance.paramTwo = aParamTwo;
    });

    return _sharedInstance;
}

そして、デフォルト値を持つこの最後のものへのプロキシとしての2番目のもの:

   + (MyClass *)sharedInstance
    {       
        return [MyClass sharedInstanceWithVariableOne:@"value1" andVariableTwo:@"value2"];
    }

したがって、configure 変数でシングルトン クラスを使用する場合は、最初に を呼び出しsharedInstanceWithVariableOne:andVariableTwo、次に のみを呼び出す必要がありますsharedInstance。このアプローチは最善ではないと思うので、他のアプローチを使用することを楽しみにしています。

前もって感謝します。

4

2 に答える 2