2010-11-09 5 views
0

Eh bien, j'apprends l'Objective-C depuis un moment maintenant, et je ne comprends pas pourquoi créer un NSArray serait bénéfique pour vous. C'est juste une collection de trucs, n'est-ce pas? Pourquoi ne pouvez-vous pas les utiliser sans faire un NSArray. Ou pouvez-vous utiliser les objets dans l'implémentation de chacune de vos méthodes (même si c'est un ivar local).Comment bénéficier de la création d'un NSArray en Objective-C?

Ainsi, toute aide serait appréciée. Merci les gars!

Répondre

0

Très souvent, le NSArray que vous voyez est une façade pour un NSMutableArray travaillant dans les coulisses.

La facturation dans l'interface comme NSArray est juste un moyen de s'assurer qu'il ne peut pas être manipulé de l'extérieur, ce qui pourrait avoir des conséquences modérément désastreuses. (Ainsi, lorsque vous demandez un NSArray d'un objet, vous obtenez en général une copie du NSMutableArray utilisé en interne.)

Comprendre pourquoi la création d'un NSMutableArray est bénéfique est laissée en exercice au lecteur.

+0

Je pense qu'il demande précisément pourquoi un tableau mutable ordinaire est utile. – zoul

+0

@zoul: J'en doute. Le scénario d'utilisation des baies en général est entièrement évident. –

+0

Peut-être pas pour un enfant de 13 ans. – zoul

1

Vous pouvez faire des variables d'instance pour chaque « élément » dont vous avez besoin:

NSString *str1; 
NSString *str2; 
NSString *str3; 

... mais qui est difficile à travailler avec, un tableau est tout simplement plus pratique. Que feriez-vous si vous vouliez imprimer toutes ces chaînes?

NSLog(@"%@", str1); 
NSLog(@"%@", str2); 
NSLog(@"%@", str3); 

Ne serait-il pas plus facile de faire une boucle sur un réseau?

NSArray *strings = [NSArray arrayWithObjects:@"one", @"two", @"three", nil]; 
for (NSString *str in strings) 
    NSLog(@"%@", str); 

Que diriez-vous si vous avez dix, vingt chaînes? Et si vous ne savez pas de combien de chaînes vous aurez besoin? Et si vous voulez passer tous ces objets à quelqu'un d'autre? Allez-vous les passer un par un?

- (void) doSomethingWithString1: (NSString*) str1 andString2: (NSString*) str2…; 

Ou préférez-vous passer un tableau?

- (void) doSomethingWithMyStrings: (NSArray*) strings; 
+0

Merci beaucoup les gars! Donc, tout ce que je dois savoir maintenant, ce sont les méthodes liées à NSArray. Et, merci encore! – taevanbat

+0

Je pense que votre réponse est la meilleure. MERCI BEAUCOUP! – taevanbat

0

Différents contextes.

Lorsque vous utilisez un NSString, il est généralement utilisé pour une seule valeur. C'est assez simple.

NSArray

Si vous voulez faire une boucle à travers de nombreuses touches/valeurs, utilisez un NSArray. Il n'est pas possible de passer en boucle par NSStrings car ils ne disposent pas de l'ordonnanceur que NSArray fait.

Pourquoi utiliser NSString

Il serait stupide d'appeler myArray[0] et foo[0] chaque fois que vous venez d'enregistrer une valeur.NSString est plus simple que NSArray, puisque vous pouvez facilement définir une valeur sur un élément graphique (sans avoir à appeler myArray[0])

Pourquoi utiliser NSArray

Il est plus souple que NSString car NSArray peut contenir plusieurs valeurs , qui peut être nécessaire dans certaines situations.

avantages Pesée et le contre

Pros (NSArray):

peut rendre votre propre code (appel myArray[1] et myArray[0] au lieu de mystring et foo)

gestion de la mémoire simplifiée (plus facile à libérer un NSArray que beaucoup NSStrings)

Moins (NSArray):

peut rendre votre code très compliqué (était que sur myArray[0] ou 1?)

est peut-être difficile de savoir quel type de données est dans le tableau (si c'est un NSString, ça va toujours pour être une chaîne, un tableau peut contenir plusieurs types de données). Vous n'utilisez pas 50 mouchoirs pour vous sécher de la douche, mais utilisez une serviette.

Donc, cela se résume à une chose. Quel contexte utilisez-vous?

+0

Je suppose que NSArray. Hehe merci! – taevanbat