Me preguntaba dónde es el mejor lugar para inicializar miembros de la clase singleton.Cocoa - Objeto Singleton: ¿Dónde inicializar las variables miembro?
Estoy usando la implementación de singleton de la guía fundamental de Apple. ¿Podría por favor precisar en qué línea se encuentran los inits? El código es el siguiente:
static MyGizmoClass *sharedGizmoManager = nil;
+ (MyGizmoClass*)sharedManager
{
@synchronized(self) {
if (sharedGizmoManager == nil) {
[[self alloc] init]; // assignment not done here
}
}
return sharedGizmoManager;
}
+ (id)allocWithZone:(NSZone *)zone
{
@synchronized(self) {
if (sharedGizmoManager == nil) {
sharedGizmoManager = [super allocWithZone:zone];
return sharedGizmoManager; // 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;
}
Es posible que desee leer http://boredzo.org/blog/archives/2009-06-17/doing-it-wrong. ¿Realmente quieres un singleton que anule el lanzamiento? Eso solo enmascara errores. –
Y antes de recordar a Jon Hess que está siguiendo los documentos de Apple: escribí esa publicación específicamente en respuesta a los documentos de Apple. –
También vale la pena señalar que las clases no tienen "miembros" de ningún tipo. Lo más cerca que puede obtener es una variable estática en el archivo de implementación de la clase. Y los miembros de la clase no son lo que quieres inicializar de todos modos. Lo que quiso decir es las variables * instance * de la instancia singleton *. –