¿Cómo get el tipo de trabajo dentro del método de class?

Para singleton, a menudo lo hago así

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

Pero esta static id instance = nil no es estricta sobre el tipo, así que quiero algo como

 static typeof(self) instance = nil 

Pero self aquí es la instancia de class singleton, que es solo lectura. ¿Cómo puedo inferir el tipo de este método de class?