iOS Singletonクラスの作成方法

Singletonはちょいちょい使うのでsnippet化しているのですが(ソラで書けないよ)
今のXcodeの環境に入れていなかったので検索してみたら
ちょっと見慣れない記述がありました。

+ (instancetype)sharedInstance
{
    static id sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}

一見いつものやつですが、

instancetypeとは

戻り値がinstancetypeと記述されています。
いつも戻り値はidで書いていました。
(ちなみにNSNotificationCenterなどもinstancetypeで記載されています。)
 
こちらがとても分かりやすいのですが
instancetype で generics の夢をみる? | Cocoaの日々情報局
コンパイラで型チェックしてくれるようです。
 
Singletonのインスタンスの場合にidで受けるように書くことはほとんどいないので
このケースでは実益は少なそうですが、今後利用するようにしてみます。
ちなみに、戻り値のみに利用できるようです。