GCDのdispatch_once関数を使って下記の様に書きます。
dispatch_onceの引数に渡したブロックはアプリケーションスコープで1度のみ実行されることが保証されるとのこと。
SingletonSample.h
@interface SingletonSample : NSObject
+ (instancetype)sharedInstance;
@end
SingletonSample.m
+ (instancetype)sharedInstance
{
static id instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [self new];
});
return instance;
}