Replaced id return type with instancetype for some init and singleton methods.
Also easier to subclass since sharedInstance will return objects from the actual class