initwithcapacité: code> est déclaré dans nsmutableArray code>, mais je veux l'utiliser pour initialiser un nsarray code>. J'y ai une solution? P>
3 Réponses :
Il n'a pas de sens pour init un nsarray code> à l'aide de initwithcapacity: code>, car vous ne pouvez pas ajouter ultérieurement des objets. Un Nsarray code> sans objets d'objets de facto de 0. Qu'est-ce que vous essayez vraiment d'atteindre? P>
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 code> convient aux critères. Initialiser un tableau vide avec la capacité a du sens, n'est-ce pas?
Etant donné que 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. P> Nsarray code> 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 code> s. P>
Il suffit de créer un Vous pouvez Utilisez soit: p> ou: p> ou: p> nsmutableArray code> avec initwithcapacité: code>, remplissez-le avec des trucs, puis faites un nsarray code> de celui-ci.
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.