I know there are several threads on this, but none answer my questions.
I\'ve implemented my singleton class like this (being aware of the controversy about singleto
You can't make the init method private, like you would do in Java with the constructor. So nothing stops you from calling [[MyClass alloc] init] which indeed creates a different object. As long as you don't do that, but stick to the sharedInstance method, your implementation is fine.
What you could do: have the init method raise an exception (e.g. with [self doesNotRecognizeSelector:@_cmd]) and perform the initialization in a different method (e.g. privateInit) which is not exposed in the header file.