391 votes

Comment puis-je convertir NSMutableArray à NSArray ?

Comment puis-je convertir NSMutableArray à NSArray en objective-c?

520voto

Georg Schölly Points 63123
NSArray *array = [mutableArray copy];

Copy fait immuable des copies. C'est très utile parce que Apple peut faire de diverses optimisations. Par exemple l'envoi d' copy d'un immuable tableau ne retient que l'objet et les retours self.

Si vous n'utilisez pas de collecte des ordures ou d'un ARC rappelez-vous que -copy conserve l'objet.

361voto

hallski Points 27832

Un NSMutableArray est une sous-classe de NSArray de sorte que vous n'aurez pas toujours besoin de convertir, mais si vous voulez vous assurer que le tableau ne peut pas être modifié, vous pouvez créer un NSArray de ces manières, selon que vous voulez il autoreleased ou pas:

/* Not autoreleased */
NSArray *array = [[NSArray alloc] initWithArray:mutableArray];

/* Autoreleased array */
NSArray *array = [NSArray arrayWithArray:mutableArray];

EDIT: La solution fournie par Georg Schölly est une meilleure façon de le faire et beaucoup plus propre, surtout maintenant que nous avons de l'ARC et de ne même pas avoir à appeler autorelease.

114voto

Richard Venable Points 2121

J’aime tous les deux les 2 principales solutions :

Ou

La principale différence que je vois en eux est leur comportement lorsque mutableArray est nul:

18voto

Jerry Thomsan Points 684

vous essayez ce code---

et

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X