Inconvénient de l'utilisation de NSMutableArray vs NSArray?
Je suis en utilisant un tableau pour stocker les objets mis en cache chargé à partir d'une base de données dans mon iPhone, et je me demandais: y at-il des inconvénients à l'utilisation de NSMutableArray que je connais?
edit: je sais que NSMutableArray peut être modifié, mais je suis à la recherche pour des raisons spécifiques (interprétation, etc..) pourquoi utiliser NSArray à la place. Je suppose qu'il y aurait une différence de performances, mais je n'ai aucune idée si c'est important ou pas.
Vous devez vous connecter pour publier un commentaire.
Si vous êtes en train de charger des objets à partir d'une base de données et vous savez exactement le nombre d'objets que vous avez, vous auriez probablement obtenir les meilleures performances de
NSMutableArray
sarrayWithCapacity:
méthode, et en ajoutant des objets jusqu'à ce que le plein, de sorte qu'il alloue de la mémoire à la fois s'il le peut.en coulisses, ils sont secrètement la même chose -*NSArray
etNSMutableArray
sont mis en œuvre avecCFArray
s via le numéro gratuit de transition (unCFMutableArrayRef
et unCFArrayRef
sont typedef est la même chose,__CFArray *
)NSArray
etNSMutableArray
devraient avoir les mêmes performances/complexité (temps d'accès en cours de O(lg N) au pire et O(1) au mieux) et la seule différence étant la quantité de mémoire les deux objets utiliseriez -NSArray
a une limite fixe, tandis queNSMutableArray
peut utiliser autant d'espace que vous avez de libre.Les commentaires dans CFArray.h ont beaucoup plus de détails à ce sujet.
*: Comme Catfish_Man points ci-après, ce n'est pas vrai.
La différence de performance de l'aide de NSArray contre NSMutable tableau surviennent principalement lorsque vous utilisez une API qui veut copier le tableau. si vous envoyez copie de immuable tableau, c'est juste des bosses de conserver le comte, mais l'envoi de copie à une mutable tableau va allouer de la mémoire de masse.
En outre, NSMutableArray n'est pas thread-safe, tandis que NSArray est (même avec tous les mutable vs "immuable" des objets). Ce pourrait être un énorme problème si vous êtes le multithreading.
Le principal inconvénient de l'
NSMutableArray
est qu'un objet à posséder unNSMutableArray
peut avoir le tableau modifié derrière son dos, si un autre objet en est le propriétaire. Cela peut vous obliger à le code de votre objet plus sur la défensive, moins agressive chasser les performances.Si le
NSMutableArray
n'est pas exposée à l'extérieur de l'objet, ce n'est pas un sujet de préoccupation.NSArray
est un meilleur choix pour le partage, précisément parce qu'il est immuable. Chaque objet de l'aide, il peut supposer qu'il ne changera pas, et n'a pas besoin de défensivement en faire une copie.C'est probablement la même raison que
NSDictionary
des copies de ses clés, plutôt que de simplement retenir: il faut être sûr qu'ils ne seront pas muter, et la copie est le seul moyen de garantir.Vous ne pouvez pas modifier
NSArray
une fois qu'il est créé. Si vous avez besoin d'ajouter/supprimer des objets à partir de votre tableau puis vous allez utiliserNSMutableArray
- pas beaucoup d'options pour cela. Je supposeNSArray
est optimisé pour les opérations de matrice. Mutable tableau fournit de manière flexible d'être modifiable.