我目前正在为我的应用编写辅助类。 helper类将返回全局可访问的变量。我创建了一个简单的帮助器,如下所示:

@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]这样访问它。每种方法的好处是什么?或者它们都相同。

最佳答案

我想雇主数组是您的MyHelper类的一个属性。

如果不调用[MyHelper sharedHelper]而调用[MyHelper雇主],则会得到错误的结果(雇主数组的值是垃圾)。

也许这里的最佳实践是在+(NSMutableArray *)用人单位中使用延迟加载,并从+(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;
}

关于ios - dispatch_once与静态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16018699/

10-10 07:34