2009-04-08 8 views
0

Est-il possible d'affecter une valeur à une variable d'instance lors d'une méthode de classe d'initialisation?Définition d'une variable d'instance dans l'initialisation

Je déclare un certain nombre de tableaux, puis je crée un tableau de tableaux, puis je l'affecte à self.months, qui est une variable d'instance. Pourquoi cela ne fonctionne-t-il pas, et comment puis-je accomplir cela?

 +(void)initialize 
{ 
    // ..... 
     NSArray *matrix = [[NSArray alloc] initWithObjects:jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec, nil ]; 

    self.months = matrix; 
    [matrix release] 

}

Répondre

3

Vous ne pouvez pas définir de variables d'instance dans les méthodes de classe car vous n'avez aucune référence à une instance. La méthode initialize sur une classe est appelée la première fois que cette classe reçoit des messages et est destinée à effectuer tout type d'installation globale dont votre classe peut avoir besoin avant le traitement de tous les messages. Par exemple, la configuration des valeurs par défaut initiales est généralement effectuée dans la méthode initialize du contrôleur ou de la classe déléguée de votre application.

Pour définir des variables d'instance, vous devez le faire dans l'initialiseur désigné de l'objet (init par défaut, mais certains objets modifient l'initialiseur désigné s'ils doivent prendre des paramètres). Par exemple:

- (id)init { 
    if((self = [super init])) { 
    myInstanceVariable = (int *)malloc(50 * sizeof(int)); 
    } 
} 

- (void)dealloc { 
    free(myInstanceVariable); 
    [super dealloc]; 
} 

Ici vous avez fait une référence à self que vous pouvez utiliser, car une instance distincte d'un objet a été alloué.

3

Je pense que vous êtes confus au sujet de ce que initialize fait. C'est pour initialiser la classe elle-même. Il n'y a pas d'instance, et donc il n'y a pas de variables d'instance. Pour initialiser une instance, remplacez la méthode init.

Questions connexes