Question: 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 = [super init];
    if (self) {
        // Initialization code here.
    }

    return self;
}

+ (LoginController *)sharedSingleton
{
    static LoginController *sharedSingleton;

    @synchronized(self)
    {
        if (!sharedSingleton)
            sharedSingleton = [[LoginController alloc] init];
        CdtMiscRegisterConnectionChangeListenerObjc(test_ConnectionChangeListenerCallback);
        return sharedSingleton;
    }
}

```

Answer: 
Short answer: you can't; Objective-C has no concept of private methods. 

Check out the answer to [this similar question](https://stackoverflow.com/questions/195078/is-it-possible-to-make-the-init-method-private-in-objective-c).
You can't make methods private in Objective-C. You could raise a [NSException](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSException_Class/Reference/Reference.html) if the wrong initializer is invoked.

```
- (id)init
{
     [NSException exceptionWithName:@"InvalidOperation" reason:@"Cannot invoke init." userInfo:nil];
}

```