2010-05-28 5 views
23

HI, J'ai créé mes applications iPhone mais j'ai un problème. J'ai un classViewController où j'ai implémenté mon programme. Je dois allouer 3 NSMutableArray mais je ne veux pas le faire dans les méthodes de grapich. Il n'y a pas de constructeur comme java pour ma classe? Merci beaucoup et désolé pour mon anglais XPconstructeur dans l'objectif c

// I want put it in a method like constructor java 

arrayPosition = [[NSMutableArray alloc] init]; 
currentPositionName = [NSString stringWithFormat:@"noPosition"]; 

Répondre

48

Oui, il y a un initialiseur. Il est appelé -init, et il va un petit quelque chose comme ceci:

- (id) init { 
    self = [super init]; 
    if (self != nil) { 
    // initializations go here. 
    } 
    return self; 
} 

Edit: Ne pas oublier -dealloc, quoique.

- (void)dealloc { 
    // release owned objects here 
    [super dealloc]; // pretty important. 
} 

Comme une note de côté, en utilisant la langue maternelle dans le code est généralement un mauvais coup, vous voulez généralement coller à l'anglais, surtout quand demander de l'aide en ligne et autres.

+4

'ARC interdit message explicite envoyer des « dealloc'' mmmh ... –

+13

@Lohoris: Cette réponse a été écrit avant que l'ARC était une chose. Je suppose qu'avec ARC vous n'avez pas du tout besoin de '-dealloc', mais vous pourriez vouloir vérifier les docs pour cela. –

5
/****************************************************************/ 
- (id) init 
{ 
    self = [super init]; 
    if (self) { 
    // All initializations you need 
    } 
    return self; 
} 
/******************** Another Constructor ********************************************/ 
- (id) initWithName: (NSString*) Name 
{ 
    self = [super init]; 
    if (self) { 
    // All initializations, for example: 
    _Name = Name; 
    } 
    return self; 
} 
/*************************** Another Constructor *************************************/ 
- (id) initWithName:(NSString*) Name AndAge: (int) Age 
{ 
    self = [super init]; 
    if (self) { 
    // All initializations, for example: 
    _Name = Name; 
    _Age = Age; 
    } 
    return self; 
} 
+2

Tous les inits doivent appeler des initiales désignées, vous ne devriez avoir qu'un seul appel super init. – Firo

+0

D'accord avec @Firo, votre '-init' devrait ressembler à ceci:' return [self initWithName: nil andAge: 0]; 'Ou avec toutes les autres valeurs par défaut appropriées. – Tricertops