从C ++ 11开始,static已知本地变量将以线程安全的方式初始化(除非-fno-threadsafe-statics给出),如本问题所述。这是否意味着以下众所周知的模式:
+ (NSObject *)onlyOnce {
static NSObject *object;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
object = [[NSObject alloc] init];
});
return object;
}
Run Code Online (Sandbox Code Playgroud)
可以替换为更短的:
+ (NSObject *)onlyOnce {
static NSObject *object = [[NSObject alloc] init];
return object;
}
Run Code Online (Sandbox Code Playgroud)
使用C ++ 11和更高版本的C ++语言方言将代码编译为Objective-C ++时?