How can i make sure user do not call init, instead client should call sharedSingleton to get a shared instance.
@synthesize delegate; - (id)init { self
Short answer: you can't; Objective-C has no concept of private methods.
Check out the answer to this similar question.