static ShareManager *_shareManager = nil; + (ShareManager*)sharedManager { @synchronized(self) { if (_shareManager == nil) { [[self alloc] init]; // assignment not done here } } return _shareManager; } + (id)allocWithZone:(NSZone *)zone { @synchronized(self) { if (_shareManager == nil) { _shareManager = [super allocWithZone:zone]; return _shareManager; // 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 } - (oneway void)release { //do nothing } - (id)autorelease { return self; }