Comment puis-je convertir NSMutableArray à NSArray en objective-c?
Réponses
Trop de publicités?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.
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.