BNRItemStore
es un singleton, y me confundí sobre por qué super allocWithZone:
debe llamarse en lugar de simple super alloc
. Y luego anula alloc
en lugar de allocWithZone
.Creando un singleton con allocWithZone:
#import "BNRItemStore.h"
@implementation BNRItemStore
+(BNRItemStore *)sharedStore {
static BNRItemStore *sharedStore = nil;
if (!sharedStore)
sharedStore = [[super allocWithZone: nil] init];
return sharedStore;
}
+(id)allocWithZone:(NSZone *)zone {
return [self sharedStore];
}
@end
perplejo, este es el lado más sutil de un curso introductorio de ObjC, por lo que si tiene preguntas sobre mi respuesta, me complace intentar aclararlo. –
¡Gracias! Tengo una pregunta. Si eliminé el método que anula allocWithZone: ¿sería seguro llamar a super alloc en lugar de a super allocWithZone: en sharedStore? – stumped
Sí. La razón para anular 'allocWithZone:' es restringir a los usuarios de esta clase la creación de otra instancia. Llamarían 'alloc' (o posiblemente' allocWithZone: 'directamente; en lugar de asignar una nueva instancia, en su lugar devolverían la existente. Esta es la parte clave para hacer que la clase sea singleton. –