8
votes

Nsarray d'int []

J'ai besoin de stocker un tas d'int [] pour mes niveaux.

J'ai décidé que la conservation de l'int [] est dans un nsmutableArray et que l'un de la matrice serait un bon moyen de le faire . p>

chose est, un int [] n'est pas un objet et vous ne pouvez pas l'ajouter à l'intérieur d'un tableau Obj-C. P>

Quelqu'un a-t-il une suggestion sur la façon dont je peux avoir une suggestion Array integer? p>

Mes matrices ressemble à ceci: p>

int lvl1[] { 4,80,49,6,40,77,21,20,91,5,100,91,...... }; 
int lvl2[] { 20,260,385,20,290,448,21,210,329,21,...... }; 
int lvl3[] { 441,21,90,364,21,70,385,21,170,434,...... }; 
...
int lvl50[] { 441,21,90,364,21,70,385,21,170,434,...... }; 


0 commentaires

4 Réponses :


3
votes

Boîte dans un nombre NSNumber:

[array addObject:[NSNumber numberWithInt:5]];


4 commentaires

J'ai pensé à cela, mais je vais littéralement avoir des milliers d'entiers générés automatiquement. Ce serait une solution très désordonnée. En outre, ils sont statiques si cela aide.


Alors, essayez ceci: cocoabyss.com/foundation/collections-tegers-performance


Désolé mais cela n'aide pas. Mon tableau ressemble à ceci: INT LVL1 [] {4 80,49,6,40,77,21,20 91,5,100,91, ......} int Lvl2 [] {20 260,385,20 290,448,21,210,329 , 21, ......} int Lvl3 [] {441,21 90,364,21,70,385,21,170,434, ......} J'ai alors besoin d'obtenir un de ces


C'est la bonne réponse, de manière générale. Dans la plupart des autres langues, la boxe et le non-boxing sont effectuées automatiquement, de sorte que vous ne le voyez pas dans le code, mais le succès de performances absolument négligeable est toujours là. @Benj Le lien que vous fournissez montre qu'il est 10 fois plus lent que d'utiliser le droit C. true. Pourtant, c'est une optimisation prématurée.



9
votes

Utilisez Nsnumber pour stocker int dans un nsmutableRayRay.

ICI EXAMLE Code: P>

// Add 
[yourMutableArray addObject:[NSNumber numberWithInt:yourInt]];

// Get 
yourInt = [((NSNumber*)[yourMutableArray objectAtIndex:0]) intValue];


0 commentaires

4
votes

craig,

Comme objectif-c est basé sur C et vous pouvez intermixer à la fois dans les applications iOS ou OSX, pourquoi ne pas simplement créer un tableau d'INTS?

Cela vous donnerait la performance de l'échelle et la réduction de la mémoire vs convertissant tout en nsnumber.

frank


2 commentaires

J'utilise un int []. J'essaie d'éviter l'utilisation d'unsemeccidentairement à l'aide de plusieurs convertis de nsnumbers et de tels. Merci quand même :)


@CRAIG Je ne suggère pas d'utiliser Nsnumber, c'est le contraire. Un int [] fonctionne parfaitement.



10
votes

EDIT: strong> modifié pour utiliser une méthode moins diabolique grâce à la permission de la commentaires de Tommy.

Vous pouvez traiter les matrices statiques comme des pointeurs et les stocker dans NSValue code> Objets:

int* level = levels[[someNSNumber intValue]];


6 commentaires

Vous pouvez stocker des pointeurs dans des objets via NSValue + ValuewithPoinger: et [InstanceOfnsValue Pointvalue], pas besoin de faire des hypothèses sur les tailles relatives des pointeurs et des entiers. Mais je pense que l'affiche veut que les chiffres individuels soient des objets sans, vous savez, le coût d'entre eux étant des objets.


Je n'ai pas besoin d'utiliser nécessairement un nsmutablarray, il s'agit simplement d'avoir une API facile de comptage, d'ObjectAindex et d'ajouter / supprimer.


@Tommy Merci d'avoir souligné cela, j'ai mis à jour la réponse en conséquence.


@CRAIG OK, mais vous pouvez simplement conserver les indices de niveau (enveloppés comme nsnumber) dans la NsmutableArray.


Merci pour vos gars d'aide, alors .. Comment ferais-je faire ce dont j'ai besoin? Avoir une liste générée de nombres par mon éditeur de niveau, puis obtenez une de ces listes aléatoires. Comment le feriez-vous? En outre, ces listes de nombres sont statiques et ne nécessitent pas de modifier sauf la recompilation.


C'est génial! Merci beaucoup @walkyTalky et @Tommy! M'a aidé des tas.