iPhone Exampleの TheElementsより
// we use the singleton approach, one collection for the entire application static PeriodicElements *sharedPeriodicElementsInstance = nil; + (PeriodicElements*)sharedPeriodicElements { @synchronized(self) { if (sharedPeriodicElementsInstance == nil) { [[self alloc] init]; // assignment not done here } } return sharedPeriodicElementsInstance; } + (id)allocWithZone:(NSZone *)zone { @synchronized(self) { if (sharedPeriodicElementsInstance == nil) { sharedPeriodicElementsInstance = [super allocWithZone:zone]; return sharedPeriodicElementsInstance; // assignment and return on first allocation } } return nil; //on subsequent allocation attempts return nil } - (id)copyWithZone:(NSZone *)zone { return self; } - (id)retain { return self; } - (unsigned)retainCount { return UINT_MAX; //denotes an object that cannot be released } - (void)release { //do nothing } - (id)autorelease { return self; } // setup the data collection - init { if (self = [super init]) { [self setupElementsArray]; } return self; }