So far I saw many examples, but not every of them is valid, follow my rules and you will get proper singleton pattern.
in MySingleton.h file:
@interface MySingleton : NSObject
{
}
+ (MySingleton *)sharedInstance;
-(id)init;
in MySingleton.m file:
+ (MySingleton *)sharedInstance
{
static MySingleton *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
-(id)init{
if ((self=[super init]) ) {
// put your init code here
}
return self;
}
And thats all. The key is to use dispatch_once which will guarantee code inside will be executed only once per whole app lifetime. You can use it like this:
NSString* someString = [[MySingleton sharedInstance] someMethodReturningString];
