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