2010-06-09 5 views
0

J'ai créé un SinglestonClass dans mon code mais j'ai un problème. Mes variables sont initialisées dans la méthode -init mais quand j'appelle singlestonClass ces variables sont réinitialisées. Pouvez-vous m'aider à créer une seule initialisation pour ma variable? merci.Classe Singleton dans l'objectif c

@implementation SingletonController 

@synthesize arrayPosition; 
@synthesize arrayMovement; 

@synthesize actualPosition; 
@synthesize actualMove; 

@synthesize stopThread; 


+(SingletonController*)sharedSingletonController{ 

    static SingletonController *sharedSingletonController; 

    @synchronized(self) { 
     if(!sharedSingletonController){ 
      sharedSingletonController = [[SingletonController alloc]init]; 
     } 
    } 

    return sharedSingletonController; 
} 


//I don't want a re-initialization for these variables 
-(id)init{ 
    self = [super init]; 
    if (self != nil) { 
     arrayPosition = [[NSMutableArray alloc]init]; 
     arrayMovement = [[NSMutableArray alloc]init]; 

     actualPosition = [[Position alloc]init]; 
     actualMove = [[Movement alloc]init]; 

     stopThread = FALSE; 
    } 
    return self; 
} 


-(void) dealloc { 
    [super dealloc]; 
} 
@end 

Répondre

2

Votre méthode init ne doit pas être appelée par quiconque, sauf pour votre classe singleton elle-même. C'est la raison pour laquelle la méthode sharedSingletonController est utilisée. C'est votre méthode d'usine qui est responsable de renvoyer la même instance statique de votre classe. Je suggère également que vous renommez l'instance statique de votre objet singleton et/ou le sélecteur sharedSingletonController lui-même pour désambiguïser entre les deux et pour une conception plus propre. Dans ce cas particulier, cela peut perturber quelqu'un qui doit lire votre code.

Sans voir comment le code client appelle sur votre méthode d'usine singleton, il est difficile de déchiffrer votre problème. Nous aurions besoin de voir le reste du code, y compris comment il est appelé. Dans votre code client, vous devriez utiliser quelque chose comme:

SingletonController *sigController = [SingletonController sharedSingletonController];

NE PAS FAIRE:

SingletonController *sigController = [[SingletonController alloc] init];

Lire here pour plus d'informations dans le Guide Cocoa Fundamentals.