2010-10-27 7 views
3

Lors de l'ajout d'objets à un NSArray à l'aide de "initWithObjects", quelqu'un peut-il confirmer que les éléments sont conservés? Je suis assez sûr qu'ils sont, mais ne peut pas trouver cela mentionné nulle part en ce qui concerne initWithObjects?NSArray initWithObjects: conserve-t-il des objets?

// CREATE DRINKS 
Coffee *drink1 = [[Coffee alloc] initWithName:@"Flat White"]; 
Coffee *drink2 = [[Coffee alloc] initWithName:@"Cappucino"]; 
Coffee *drink3 = [[Coffee alloc] initWithName:@"Latte"]; 
Coffee *drink4 = [[Coffee alloc] initWithName:@"Mocha"]; 
Coffee *drink5 = [[Coffee alloc] initWithName:@"Hot Chocolate"]; 

// SET ARRAY 
NSArray *tempArray = [[NSArray alloc] initWithObjects:drink_1, drink_2, drink_3, drink_4, drink_5, nil]; 
[self setCoffeeList:tempArray]; 

// CLEAN UP 
[drink_1 release]; 
[drink_2 release]; 
[drink_3 release]; 
[drink_4 release]; 
[drink_5 release]; 
[tempArray release]; 
[super viewDidLoad]; 

acclamations Gary

Répondre

5

initWithObjects conserve tous les articles dans la matrice.

initWithObjects: COUNT:

  • (id) initWithObjects: comptage (id *) Objets: (NSUInteger) compter; Disponibilité: OpenStep

Ceci est un initialiseur désigné pour la classe. Les sous-classes doivent remplacer cette méthode. Ceci devrait initialiser le tableau avec les objets count (peut-être zéro). Conserve chaque objet placé dans le tableau. Appelle -init (qui ne fait rien d'autre que la compatibilité MacOS-X) et doit être réimplémenté dans les sous-classes pour que tous les autres initialisers fonctionnent.

+0

obtenir cette description à partir de la documentation Xcode, les docs pour initWithObjects: count: (NSSet) mention retain, mais pas NSArray. Je suppose que Chuck souligne sa pratique standard et n'est pas explicitement mentionné partout. Merci beaucoup ... – fuzzygoat

+0

@fuzzygoat: La documentation ne devrait pas avoir besoin de le spécifier à nouveau pour chaque méthode. La règle générique de gestion de la mémoire est assez simple et courte; tout argument d'objet qui doit être conservé après la sortie de la méthode doit être conservé, sauf s'il s'agit d'un délégué. La documentation d'Apple ne documente généralement que les quelques exceptions à cette règle (observateurs «NSNotificationCenter» et délégués «CALayer»). – PeyloW

+0

Merci, très apprécié. – fuzzygoat

4

Les objets sont censés prendre en charge les éléments dont ils ont besoin pour rester dans les parages. Un tableau est responsable de ses éléments, donc il les conserve. Voir le memory management guide pour tous les détails. (Non, sérieusement, lisez-le, vous vous remercierez plus tard quand vous n'aurez plus à poser cette question à propos de chaque cours que vous utiliserez et que votre programme ne s'écrase pas toutes les cinq secondes.)

+0

Merci, j'aurai un autre regard ce soir. – fuzzygoat

Questions connexes