J'ai un objet qui est initié dans mon fichier nib. Je veux que ce soit un singleton mais aussi accessible du code à travers [myClass sharedInstance];
. En ce moment, j'ai ceci:Appel de l'objet singleton initié à partir de la plume
static myClass *singleton = nil;
@implementation myClass
+ (myClass *)sharedInstance
{
if (!singleton) singleton = [[self class] new];
return singleton;
}
+ (id)alloc
{
return [self sharedInstance];
}
- (id)init
{
if ([self class] != nil)
self = [super init])
return self;
}
@end
Mais alloc
ne sera jamais appelé.
Je ne sais pas pourquoi votre méthode 'alloc' n'est pas appelée (peut-être avez-vous besoin de surcharger' allocWithZone: '), mais cela ne va-t-il pas poser problème? Quand 'alloc' appelle' sharedInstance', cela va entraîner un autre appel à 'alloc', et ainsi de suite indéfiniment. – David
Il semble que j'ai vraiment besoin de allocWithZone: et que j'ai une boucle infinie. – Jane
Pour résoudre la boucle infinie, vous pourriez avoir une variable d'indicateur qui indiquait si le singleton était en train d'être créé. 'sharedInstance' le définirait, et' alloc' le vérifierait. Si elle était définie, 'alloc' appelait' [super alloc] '. – David