In apple doc singleton:
static MyGizmoClass *sharedGizmoManager = nil;
+ (MyGizmoClass*)sharedManager {
if (sharedGizmoManager == nil) {
sharedGizmoManager = [[super allocWithZone:NULL] init];
}
return sharedGizmoManager;
}
+ (id)allocWithZone:(NSZone *)zone {
return [[self sharedManager] retain];
}
- (id)copyWithZone:(NSZone *)zone {
return self;
}
- (id)retain {
return self;
}
- (NSUInteger)retainCount {
return NSUIntegerMax; //denotes an object that cannot be released
}
- (void)release {
//do nothing
}
- (id)autorelease {
return self;
}
I have a question:
+ (id)allocWithZone:(NSZone *)zone {
return [[self sharedManager] retain];
}
retain should omit, but why remain retain?
Because return [self sharedManager]
or [[self sharedManager] retain]
is equal.