9
votes

InitwithCapacité: à Nsarray

initwithcapacité: est déclaré dans nsmutableArray , mais je veux l'utiliser pour initialiser un nsarray . J'y ai une solution?


0 commentaires

3 Réponses :


6
votes

Il n'a pas de sens pour init un nsarray à l'aide de initwithcapacity: , car vous ne pouvez pas ajouter ultérieurement des objets. Un Nsarray sans objets d'objets de facto de 0. Qu'est-ce que vous essayez vraiment d'atteindre?


2 commentaires

Cette question est complètement indépendante à sa réponse.


Je suis en train de mettre en œuvre un cache de grande taille et trouvez que nsarray convient aux critères. Initialiser un tableau vide avec la capacité a du sens, n'est-ce pas?



12
votes

Etant donné que Nsarray Les objets sont immuables (ne peuvent pas modifier les objets qu'ils contiennent) Il n'est pas utile de régler la capacité de Nsarray s.

La capacité est le nombre d'objets qu'un tableau peut contenir sans mémoire de réaffectation. Il est utilisé uniquement pour l'optimisation.


0 commentaires

5
votes

Il suffit de créer un nsmutableArray avec initwithcapacité: , remplissez-le avec des trucs, puis faites un nsarray de celui-ci.

Vous pouvez Utilisez soit: xxx

ou: xxx

ou: xxx < / p>


7 commentaires

Ceci est probablement plus cher que d'utiliser une taille par défaut et de le laisser se développer.


Mesurez-le et rapportez-vous avec des chiffres.


Je pense avoir un résultat concluant quant à ce qui est plus rapide serait vraiment difficile sans analyser le code source. Il y a tellement de variables comme le nombre d'éléments à ajouter, des conditions de mémoire (et donc des performances de realloc), etc.


Vous pouvez définitivement tester ces revendications.


Comment gagneriez-vous de manière empireuse la fragmentation de la mémoire (qui ferait l'effet de la vitesse de RealLoc) dans un tel test?


Ne pas être affligé, mais vous devriez déjà connaître la réponse à votre question, si vous affirmez positivement qu'une méthode est plus chère qu'une autre.


"Probablement" ... c'était une supposition éduquée.