简单的答案:不要使用该代码,它已经过时且不再推荐。这些天创建单例的正确方法是使用dispatch_once
:
+ (instancetype)sharedInstance
{
static dispatch_once_t once;
static id sharedInstance;
dispatch_once(&once, ^{
sharedInstance = [(id)[super alloc] init];
});
return sharedInstance;
}
如果你想阻止你的类的用户直接分配一个实例,那么unavailable
在你的头文件中为那些你不想调用的方法使用编译器属性:
+ (instancetype)alloc __attribute__((unavailable("alloc not available, call sharedInstance instead")));
- (instancetype)init __attribute__((unavailable("init not available, call sharedInstance instead")));
+ (instancetype)new __attribute__((unavailable("new not available, call sharedInstance instead")));