簡単な答え: そのコードは使用しないでください。古いコードであり、推奨されていません。最近のシングルトンを作成する正しい方法は、次を使用することdispatch_once
です。
+ (instancetype)sharedInstance
{
static dispatch_once_t once;
static id sharedInstance;
dispatch_once(&once, ^{
sharedInstance = [(id)[super alloc] init];
});
return sharedInstance;
}
クラスのユーザーがインスタンスを直接割り当てるのを防ぎたい場合は、unavailable
呼び出したくないメソッドのヘッダーで compiler 属性を使用します。
+ (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")));