Objective C Singleton - 为什么最初的nil赋值?

Mic*_*atz 0 singleton design-patterns objective-c

我在ObjectiveC中编写了一个单例,并在我看过的许多站点中看到了这个实现.我真的不明白第一个原始的nil赋值.由于dispatch_once中的块(据我所知......),该方法如何返回先前分配的值(在块内)而不是nil.

 + (id)sharedManager {
        static MyManager *sharedMyManager = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            sharedMyManager = [[self alloc] init];
        });
        return sharedMyManager;
    }
Run Code Online (Sandbox Code Playgroud)

PS - 我注意到这个问题曾经在这里被问到但是没有得到解决,并且没有解释这个问题 - 为什么为单身人士的静态变量分配了一个零

Mar*_*n R 5

该sharedMyManager = nil分配是没有必要的,因为 静态变量自动初始化为零.你可以简单地删除它.

此外,在使用之前赋予值的dispatch_once()保证sharedMyManager.

另请注意,dispatch_once()使用onceToken自动初始化为零的事实.