2010-02-22 6 views
0

J'essaie d'améliorer les performances de mon application, et je voudrais passer de NSMutableArray que j'utilise actuellement à un tableau C alloué dynamiquement.Comment allouer dynamiquement un tableau de pointeurs à des objets en Objective-C?

En tant que test, j'ai créé cette classe:

Dans mon interface de classe, je:

MyObject *myObjectArray; 

Dans ma mise en œuvre, après que l'objet a été initialisé, j'ai une autre méthode pour mettre en place le tableau:

-(void) createObjectsWithNumberOfObjects:(int)numberOfObjects 
{ 
    MyObject *tempObject = nil; 
    myObjectArray = (MyObject*) malloc(numberOfObjects * sizeof(tempObject)); 
    for(int i = 0; i < numberOfObjects; i++) 
     tempObject = [[MyObject alloc] init]; 
     myObjectArray[i] = (MyObject*) tempObject; // error 
    } 
} 

Je reçois une erreur de: Types incompatibles Attribution

Alors qu'est-ce que je fais mal?

L'utilisation d'un tableau d'objets dynamiquement alloué comme celui-ci est-elle possible?

Aussi, Dans ma méthode dealloc, je l'ai configuré pour .L'appel sur chaque objet alors libre (myObjectArray)

Répondre

2

Vous avez besoin d'un peu plus * s. Déclarez votre pointeur de tableau comme:

MyObject **myObjectArray; 

Et puis initialiser comme ceci:

myObjectArray = (MyObject**) malloc(numberOfObjects * sizeof(MyObject *)); 

Laissez tout le reste dans votre code même comme il est maintenant et vous devriez être bon! Pourquoi voulez-vous changer de NSMutableArray? C'est beaucoup plus capable en termes de flexibilité et de support de Cocoa que votre tableau C sera.

+0

@ Big Dogg, Si vous avez des problèmes de performances, je peux tout sauf garantir que NSMutableArray n'est pas la raison ... –

+0

Aucun problème de performance (pour l'instant). Je suis curieux de connaître le gain de performance lié à l'utilisation d'un tableau C standard par rapport à NSMutableArray. Avec une centaine d'objets accessibles chaque image, je pense qu'il y aurait une sorte d'amélioration des performances. Cependant, vous avez raison de dire que si un décalage se produit, il sera probablement ailleurs. – codedeziner

+2

Si vous êtes vraiment préoccupé par les performances, je vous suggère d'éviter une optimisation prématurée et de profiler votre code avec Instruments et Shark. Vous pourriez être surpris de ce qui est réellement le goulot d'étranglement dans votre application. –

0

Etes-vous vraiment sûr que vous allez améliorer les performances beaucoup? NSMutableArray a été autour depuis longtemps et est susceptible d'être plus intelligent que vous en ce moment en termes d'allocation de plus de mémoire pour les nouveaux éléments. Maintenant, si vous créez une liste liée ou quelque chose, cela pourrait donner un avantage pour des choses comme des insertions au milieu ... mais pour un simple tableau que vous pouvez ajouter, je ne suis pas sûr de combien de gain tu verras.

+0

Il ne s'agit pas de l'allocation de la mémoire, mais plutôt du temps de traitement de l'itération de chaque élément. Lorsque je dois accéder à de nombreux objets 60 fois par seconde, je pense qu'un tableau C standard serait plus rapide que NSMutableArray. Cependant, je peux me tromper ... – codedeziner

Questions connexes