BNRItemStore
è un singleton e sono stato confuso sul motivo per cui è necessario chiamare super allocWithZone:
invece del semplice vecchio super alloc
. Quindi, sostituisci alloc
anziché allocWithZone
.Creazione di 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
stumped, questo è sul lato più sottile di un corso introduttivo ObjC, quindi se avete domande sulla mia risposta, sono felice di provare a chiarire. –
Grazie! Ho una domanda. Se ho cancellato il metodo che sovrascrive allocWithZone: sarebbe sicuro chiamare super allocazione invece di super allocWithZone: in sharedStore? – stumped
Sì. Il motivo dell'override di 'allocWithZone:' è di limitare qualsiasi utente di questa classe a creare un'altra istanza. Chiamerebbero 'alloc' (o possibilmente' allocWithZone: 'direttamente, invece di allocare una nuova istanza, invece di restituire quella esistente.Questa è la parte fondamentale per rendere la classe un singleton. –