Corriger le Pattern Singleton Objective-C (iOS)?

J'ai trouvé quelques informations sur le net pour créer une classe singleton à l'aide de PGCD. C'est cool parce que c'est thread-safe avec de très faible hauteur. Malheureusement je ne pouvais pas trouver de solutions complètes, mais seulement des extraits de l'sharedInstance méthode. J'ai donc fait ma propre classe à l'aide de la méthode essai-erreur - et et voila - ce qui suit est sorti:

@implementation MySingleton

//MARK: -
//MARK: Singleton Pattern using GCD

+ (id)allocWithZone:(NSZone *)zone { return [[self sharedInstance] retain]; }
- (id)copyWithZone:(NSZone *)zone { return self; }
- (id)autorelease { return self; }
- (oneway void)release { /* Singletons can't be released */ }
- (void)dealloc { [super dealloc]; /* should never be called */ }
- (id)retain { return self; }
- (NSUInteger)retainCount { return NSUIntegerMax; /* That's soooo non-zero */ }

+ (MySingleton *)sharedInstance
{
    static MySingleton * instance = nil;

    static dispatch_once_t predicate;   
    dispatch_once(&predicate, ^{
        //--- call to super avoids a deadlock with the above allocWithZone
        instance = [[super allocWithZone:nil] init];
    });

    return instance;
}

//MARK: -
//MARK: Initialization

- (id)init
{
    self = [super init];
    if (self) 
    {
        //Initialization code here.
    }
    return self;
}

@end

N'hésitez pas à commenter et me dire si j'ai raté quelque chose ou de faire quelque chose de complètement faux 😉

Cheers
Stefan

  • Je serais tenté d'ajouter un -(void)dealloc qui lève une exception, de cette façon, vous devriez être en mesure de traquer la délinquance acteur si quelqu'un est d'obtenir une instance du singleton et puis en le relâchant. En plus d'être un abus du motif, je veux vous laisser avec un bancales pointeur.
  • meta question: est-ce que ce sera à [codereview.stackexchange.com/]?
  • apple conseille fortement de ne pas créer des singletons primordial de conserver/release! cela permettra de briser les applications de la transition à l'ARC
  • Double/étroitement liés: Quel est votre Objectif-C singleton ressembler?
InformationsquelleAutor blackjacx | 2011-09-29