2010-06-17 4 views
1
@implementation MySingletonClass 
static MySingletonClass *sharedInstance = nil; 


+ (MySingletonClass*)sharedInstance { 
    @synchronized(self) { 
     if (sharedInstance == nil) { 
      sharedInstance = [[self alloc] init]; 
     } 
    } 
    return sharedInstance; 
} 

+ (id)alloc { 
    @synchronized(self) { 
     if (sharedInstance == nil) { 
      sharedInstance = [super alloc]; 
      return sharedInstance; 
     } 
    } 
    return nil; 
} 

+ (id)allocWithZone:(NSZone *)zone { 
    @synchronized(self) { 
     if (sharedInstance == nil) { 
      sharedInstance = [super allocWithZone:zone]; 
      return sharedInstance; 
     } 
    } 
    return nil; 
} 

-(id)init { 
    self = [super init]; 
    if (self != nil) { 
     // initialize stuff here 
    } 

    return self; 
} 

@end 

Vous ne savez pas si vous pouvez remplacer à la fois alloc et allocWithZone: comme ceci ...?Est-ce que ce motif singleton a du sens?

Répondre

1

Vous n'avez pas besoin de passer outre alloc parce que l'implémentation par défaut appelle allocWithZone:

Autre que cela, vous avez probablement besoin de passer outre certaines autres méthodes. Voir le Apple docs pour plus de détails.

0

J'ai aussi utilisé le modèle cocoawithlove dans de nombreux projets; Le answer de Wikipedia est également bon. Comme toujours, n'oubliez pas le documentation d'Apple est un bon guide sur la façon dont leurs cadres et applications sont construites avec des classes singleton.

Je viens de trouver ceci implementation on github; essayé, et fonctionne bien.

Questions connexes