2010-08-27 8 views
1

Si j'ai un NSMutableArray:Question sur NSMutableArray

NSMutableArray *principalTable; 

et j'ai un autre NSMutableArray:

NSMutableArray *secondTable; 

et je le fais:

[secondTable addObject:@"string"]; 

[principalTable addObject: secondTable]; 

[secondTable removeAllObjects]; 

Le principalTable a 1 objet mais cet objet n'a rien à l'intérieur. Donc ma question est:

  • Lorsque j'ajoute un objet dans un tableau, le tableau pointe sur l'objet, ou copie l'objet dans le tableau?
  • Et est-ce la même chose quand j'ajoute un nsmutabledictionnary?

Répondre

2
[secondTable addObject:@"string"]; 

[principalTable addObject: secondTable]; 

[secondTable removeAllObjects]; 

Lorsque vous faites ci-dessus, principalTable contiendra une référence à l'instance secondTable NSMutableArray et se pas contiennent directement la chaîne. Ainsi, lorsque vous removeAllObjects, vous videz secondTable et principalTable continuera à contenir une référence à ce tableau mutable maintenant vide.

Aucun de vos codes ne copie quoi que ce soit.

NSMutableDictionary copie les clés. Pas de valeurs.

+0

Donc, si je suis dans une boucle, je dois créer une nouvelle table à chaque fois et l'ajouter à principalTable? – alex

+0

Dépend de vos besoins; Si vous voulez un tableau de tableaux, vous aurez besoin d'un nouveau tableau à chaque passage. Si vous voulez un tableau de chaînes, vous n'avez pas du tout besoin du second tableau. – bbum

0

Le tableau contient une référence (c'est-à-dire un pointeur) à l'objet que vous avez ajouté. Ainsi, lorsque vous avez supprimé tous les objets de secondTable, vous avez supprimé le tableau du même tableau qui est un élément de la table principale.