2

現在、アプリのヘルパー クラスを作成しています。ヘルパー クラスは、グローバルにアクセス可能な変数を返します。以下に示すように、単純なヘルパーを作成しました。

@interface MyHelper : NSObject
{

}

+(id) sharedHelper;

+(NSMutableArray *) employers;


+(id) sharedHelper
{
    static MyHelper *sharedHelper = nil;
    static dispatch_once_t onceToken;

    dispatch_once(&onceToken,^{

        sharedHelper = [[self alloc] init];
    });

    return sharedHelper;
}

+(NSMutableArray *) employers
{
    return _employers; 
}

これで、次のように雇用主にアクセスできます。

[MyHelper employers]また、このようにアクセスすることもできます[[MyHelper sharedHelper] employers]。各アプローチの利点は何ですか、または両方とも同じです。

4

2 に答える 2

2

I suppose that employers array is a property of your class MyHelper.

If you call [MyHelper employers] without call [MyHelper sharedHelper] you can get incorrect result (the value of employers array is garbage).

Maybe the best practice here is to use lazy loading in +(NSMutableArray *) employers and get static variable out of +(id) sharedHelper:

static MyHelper *sharedHelper = nil;
static dispatch_once_t onceToken;

+(id) sharedHelper
{
    dispatch_once(&onceToken,^{

        sharedHelper = [[self alloc] init];
    });

    return sharedHelper;
}

+(NSMutableArray *) employers
{
    if(!sharedHelper)
        [MyHelper sharedHelper]; 

    return _employers; 
}
于 2013-04-15T15:22:59.477 に答える