Apple provides their own solution to creating a full-blown singleton class, but this can be a daunting task for a simple need. A semi-singleton is much easier to create but has two caveats:
1) semi-singletons only work if there is ever only one instance of the class
2) the singleton cannot be used to initialize itself
So, here is how to make a simple "HelloWorld" class into a semi-singleton.
In the HelloWorld.m file, create a static property to hold the singleton instance:
// put just after @implementation line
static HelloWorld* helloWorldInstance;
in the init method, assign the instance (self) to the static property:
-(id) init
{
if ((self = [super init]))
{
// assign the semi-singleton
helloWorldInstance = self;
// do other init stuff here ...
}
return self;
}
create the shared static method for accessing the semi-singleton:
+(HelloWorld*) sharedInstance {
return helloWorldInstance;
}
Lastly, be sure to dealloc the property to avoid crashes:
-(void) dealloc
{
helloWorldInstance = nil;
[super dealloc];
}
And now from any class, we can access a pointer to the instance:
#import HelloWorld.h
HelloWorld *helloWorld = [HelloWorld sharedInstance];
And there you have it. Thanks to Steffen Itterheim and his book about cocos2d programming for the original tip!