GCD风格的Singleton抛出编译错误......有时候?

时间:2013-09-16 14:41:26

标签: objective-c singleton objective-c-blocks grand-central-dispatch

我正在Objective-C中实现教科书单例:

+ (instancetype) sharedSingleton
{
    id sharedInstance = nil;
    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{            
        sharedInstance = [[self alloc] init];
    });

    return sharedInstance;
}

......正如我一直在做的那样。将旧的@synchronized - 语法单例更改为此类时,在旧项目中(在最新版本的Xcode中打开),我收到错误:

Variable is not assignable (missing __block type specifier)

......指着分配线。我在其他代码的许多部分都有完全相同的代码,使用相同的环境构建和运行,从来没有问题......发生了什么?我应该在__block限定符之前加上它并完成它,还是在这里有更多的目标?

我唯一能想到的是,我现在正在进行现代化的旧项目 NOT 已过渡到ARC ......(还)

1 个答案:

答案 0 :(得分:4)

static变量上缺少sharedInstance。那条线应该是

static id sharedInstance = nil;

Colin Wheelas a good and short article about how to create singeltons using dispatch_once