457Singleton Classes and Shared Resources in Objective-C

Resource.h

#import <Cocoa/Cocoa.h>
 
@interface Resource : NSObject {
	float myValue;
}
 
@property float scale;
 
+ (id)shared;
 
@end

 

Resource.m

#import "Resource.h"
 
@implementation Resource
 
@synthesize scale;
 
- (id)init {
	scale = 1.0f	// my default value
}
 
+ (id)shared {
	static Resource *sharedResource = nil;
	if (!sharedResource) {
		sharedResource = [[self alloc] init];
	}
	return sharedResource;
}
@end

An now it can be used like the following:

Resource *r = [Resource shared];
NSLog(@"Resource Test: %f", [r myValue]);
// Resource Test: 1.000000
 
[r setMyValue:2.0];
NSLog(@"Resource Test: %f", [r myValue]);
//# Resource Test: 2.000000
 
Resource *s = [Resource shared];
[s setMyValue:2.111];
NSLog(@"Resource Test: %f", [s myValue]);
// Resource Test: 2.111000
 
NSLog(@"Resource Test: %f", [r myValue]);
//Resource Test: 2.111000

Note that the values stays constant, even if another instantionation occurs. I guess that’s what Singleton classes are all about.

Adapted from Scott Stevenson’s fantastic introduction at Cocoa Dev Central.

And more tutorials from Scott Stevenson…
Cocoa Dev Central: Learn C for Cocoa
Cocoa Dev Central: Learn Objective C